diff --git a/.gitattributes b/.gitattributes index 4e8417c0c0..1f2aa0c6da 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,6 +10,14 @@ Makefile text eol=lf *.inc text eol=lf *.sha1 text eol=lf *.json text eol=lf +*.sed text eol=lf +*.cpp text eol=lf +.gitattributes text eol=lf +.gitignore text eol=lf +*.hpp text eol=lf +*.md text eol=lf +*.ps1 text eol=crlf +*.yml text eol=lf *.png binary *.bin binary diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..c381b50f1b --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,8 @@ + + +## Description + + +## **Discord contact info** + + \ No newline at end of file diff --git a/.gitignore b/.gitignore index ebf507247b..38c3e02d67 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ porymap.project.cfg .vscode/ *.a .fuse_hidden* +*.sna diff --git a/Makefile b/Makefile index ca282d07e6..78a2c2a4fc 100644 --- a/Makefile +++ b/Makefile @@ -63,13 +63,13 @@ ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) ifeq ($(MODERN),0) CC1 := tools/agbcc/bin/agbcc$(EXE) -override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm +override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g ROM := pokeemerald.gba OBJ_DIR := build/emerald LIBPATH := -L ../../tools/agbcc/lib else CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet -override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mcpu=arm7tdmi -fno-toplevel-reorder -Wno-pointer-to-int-cast +override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g ROM := pokeemerald_modern.gba OBJ_DIR := build/modern LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" @@ -136,6 +136,9 @@ C_ASM_OBJS := $(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o,$(C_ASM_SRCS)) ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) +# get all the data/*.s files EXCEPT the ones with specific rules +REGULAR_DATA_ASM_SRCS := $(filter-out $(DATA_ASM_SUBDIR)/maps.s $(DATA_ASM_SUBDIR)/map_events.s, $(wildcard $(DATA_ASM_SUBDIR)/*.s)) + DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS)) @@ -178,7 +181,7 @@ mostlyclean: tidy rm -f $(SAMPLE_SUBDIR)/*.bin rm -f $(CRY_SUBDIR)/*.bin rm -f $(MID_SUBDIR)/*.s - 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 {} + + find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} + @@ -275,23 +278,32 @@ endif $(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s $$(c_asm_dep) $(AS) $(ASFLAGS) -o $@ $< -ifeq ($(NODEP),1) -$(ASM_BUILDDIR)/%.o: asm_dep := -else -$(ASM_BUILDDIR)/%.o: asm_dep = $(shell $(SCANINC) -I "" $(ASM_SUBDIR)/$*.s) -endif +# The dep rules have to be explicit or else missing files won't be reported. +# As a side effect, they're evaluated immediately instead of when the rule is invoked. +# It doesn't look like $(shell) can be deferred so there might not be a better way. -$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $$(asm_dep) + +ifeq ($(NODEP),1) +$(ASM_BUILDDIR)/%.o: $(ASM_SUBDIR)/%.s $(AS) $(ASFLAGS) -o $@ $< - -ifeq ($(NODEP),1) -$(DATA_ASM_BUILDDIR)/%.o: data_dep := else -$(DATA_ASM_BUILDDIR)/%.o: data_dep = $(shell $(SCANINC) -I include -I "" $(DATA_ASM_SUBDIR)/$*.s) +define ASM_DEP +$1: $2 $$(shell $(SCANINC) -I include -I "" $2) + $$(AS) $$(ASFLAGS) -o $$@ $$< +endef +$(foreach src, $(ASM_SRCS), $(eval $(call ASM_DEP,$(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o, $(src)),$(src)))) endif -$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $$(data_dep) +ifeq ($(NODEP),1) +$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s $(PREPROC) $< charmap.txt | $(CPP) -I include | $(AS) $(ASFLAGS) -o $@ +else +define DATA_ASM_DEP +$1: $2 $$(shell $(SCANINC) -I include -I "" $2) + $$(PREPROC) $$< charmap.txt | $$(CPP) -I include | $$(AS) $$(ASFLAGS) -o $$@ +endef +$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call DATA_ASM_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src)))) +endif $(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s $(AS) $(ASFLAGS) -I sound -o $@ $< diff --git a/asm/macros/battle_frontier/battle_tower.inc b/asm/macros/battle_frontier/battle_tower.inc index 71e795b1d1..ccc777c507 100644 --- a/asm/macros/battle_frontier/battle_tower.inc +++ b/asm/macros/battle_frontier/battle_tower.inc @@ -72,9 +72,9 @@ special CallBattleTowerFunc .endm - @ Unknown. Destroys some link task if using wireless link. Wait for link? - .macro tower_unklink - setvar VAR_0x8004, BATTLE_TOWER_FUNC_13 + @ Attempts to close link connection. Used when finishing a link multi challenge. + .macro tower_closelink + setvar VAR_0x8004, BATTLE_TOWER_FUNC_TRY_CLOSE_LINK special CallBattleTowerFunc .endm diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 5e5a2758da..eafd19b1c2 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1434,6 +1434,7 @@ @ Sets the color of the text in standard message boxes. 0x00 produces blue (male) text, 0x01 produces red (female) text, @ 0xFF resets the color to the default for the current OW's gender, and all other values produce black text. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro textcolor color:req .byte 0xc7 .byte \color @@ -1441,6 +1442,7 @@ @ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom @ of the screen when the Main Menu is opened. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro loadhelp pointer:req .byte 0xc8 .4byte \pointer @@ -1448,21 +1450,25 @@ @ The exact purpose of this command is unknown, but it is related to the blue help-text box that appears on the bottom of @ the screen when the Main Menu is opened. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro unloadhelp .byte 0xc9 .endm @ After using this command, all standard message boxes will use the signpost frame. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro signmsg .byte 0xca .endm @ Ends the effects of signmsg, returning message box frames to normal. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro normalmsg .byte 0xcb .endm @ Compares the value of a hidden variable to a dword. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro comparehiddenvar a:req, value:req .byte 0xcc .byte \a @@ -1489,6 +1495,7 @@ .endm @ Sets worldmapflag to 1. This allows the player to Fly to the corresponding map, if that map has a flightspot. + @ Used only in FireRed/LeafGreen, does nothing in Emerald. .macro setworldmapflag worldmapflag:req .byte 0xd0 .2byte \worldmapflag diff --git a/asmdiff.sh b/asmdiff.sh index 9e8749acff..6ea588131d 100755 --- a/asmdiff.sh +++ b/asmdiff.sh @@ -1,7 +1,11 @@ #!/bin/bash OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" -OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" +if [ $(($1)) -ge $((0x8000000)) ]; then + OPTIONS="--adjust-vma=0x8000000 --start-address=$(($1)) --stop-address=$(($1 + $2))" +else + OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" +fi $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pokeemerald.gba > pokeemerald.dump diff -u baserom.dump pokeemerald.dump diff --git a/berry_fix/asm/loader.s b/berry_fix/asm/loader.s index 24eb2df558..a780140785 100644 --- a/berry_fix/asm/loader.s +++ b/berry_fix/asm/loader.s @@ -109,7 +109,7 @@ _1a0: strh r1, [r0, 0xa] @ SIOMLT_SEND ldr r0, =_data_2f0 ldr r1, =gCode - svc 0x11 << 16 + swi 0x11 << 16 ldr lr, =gCode bx lr .pool diff --git a/berry_fix/payload/include/gba/m4a_internal.h b/berry_fix/payload/include/gba/m4a_internal.h index 494d31f935..339a0774ed 100644 --- a/berry_fix/payload/include/gba/m4a_internal.h +++ b/berry_fix/payload/include/gba/m4a_internal.h @@ -100,12 +100,12 @@ struct CgbChannel u8 le; u8 sw; u32 fr; - u32 *wp; - u32 *cp; - void *tp; - void *pp; - void *np; - u32 d4[2]; + u32 wp; + u32 cp; + u32 tp; + u32 pp; + u32 np; + u8 d4[8]; }; struct MusicPlayerTrack; @@ -138,10 +138,10 @@ struct SoundChannel u32 fw; u32 freq; struct WaveData *wav; - s8 *cp; + u32 cp; struct MusicPlayerTrack *track; - void *pp; - void *np; + u32 pp; + u32 np; u32 d4; u16 xpi; u16 xpc; @@ -172,11 +172,11 @@ struct SoundInfo u8 pcmDmaPeriod; // number of V-blanks per PCM DMA u8 maxLines; u8 gap[3]; - u32 pcmSamplesPerVBlank; - u32 pcmFreq; - u32 divFreq; + s32 pcmSamplesPerVBlank; + s32 pcmFreq; + s32 divFreq; struct CgbChannel *cgbChans; - void (*func)(); + u32 func; u32 intp; void (*CgbSound)(void); void (*CgbOscOff)(u8); @@ -184,7 +184,7 @@ struct SoundInfo u32 MPlayJumpTable; u32 plynote; u32 ExtVolPit; - u32 gap2[4]; + u8 gap2[16]; struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; }; @@ -248,7 +248,7 @@ struct MusicPlayerTrack u8 key; u8 velocity; u8 runningStatus; - s8 keyM; + u8 keyM; u8 pitM; s8 keyShift; s8 keyShiftX; @@ -312,7 +312,7 @@ struct MusicPlayerInfo struct MusicPlayerTrack *tracks; struct ToneData *tone; u32 ident; - void (*func)(); + u32 func; u32 intp; }; @@ -447,7 +447,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *); // extended sound command handler functions void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); diff --git a/berry_fix/payload/include/global.fieldmap.h b/berry_fix/payload/include/global.fieldmap.h index f876e5a567..d5ab0812e5 100644 --- a/berry_fix/payload/include/global.fieldmap.h +++ b/berry_fix/payload/include/global.fieldmap.h @@ -79,23 +79,16 @@ struct CoordEvent struct BgEvent { - /*0x00*/u16 x; - /*0x02*/u16 y; - /*0x04*/u8 elevation; - /*0x05*/u8 kind; - /*0x08*/union { // carried over from diego's FR/LG work, seems to be the same struct - // in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union. + u16 x, y; + u8 elevation; + u8 kind; // The "kind" field determines how to access bgUnion union below. + union { u8 *script; - - // hidden item type struct { u16 item; - u16 hiddenItemId; // flag offset to determine flag lookup + u16 hiddenItemId; } hiddenItem; - - // secret base type u32 secretBaseId; - } bgUnion; }; diff --git a/berry_fix/payload/src/flash.c b/berry_fix/payload/src/flash.c index 499a1f9710..1f09d0b8f7 100644 --- a/berry_fix/payload/src/flash.c +++ b/berry_fix/payload/src/flash.c @@ -296,7 +296,7 @@ u8 HandleWriteSectorNBytes(u8 sectorNum, u8 *data, u16 size) u8 TryWriteSector(u8 sectorNum, u8 *data) { - if (ProgramFlashSectorAndVerify(sectorNum, data)) // is damaged? + if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) // is damaged? { SetSectorDamagedStatus(SECTOR_DAMAGED, sectorNum); // set damaged sector bits. return SAVE_STATUS_ERROR; diff --git a/common_syms/battle_factory_screen.txt b/common_syms/battle_factory_screen.txt index 9f68681399..3ddeb6d3b1 100644 --- a/common_syms/battle_factory_screen.txt +++ b/common_syms/battle_factory_screen.txt @@ -1 +1 @@ -gUnknown_030062E8 +gFactorySelect_CurrentOptionFunc diff --git a/common_syms/battle_tower.txt b/common_syms/battle_tower.txt index dd198e2292..7371109d51 100644 --- a/common_syms/battle_tower.txt +++ b/common_syms/battle_tower.txt @@ -1 +1 @@ -gUnknown_03006298 +gFrontierTempParty diff --git a/constants/gba_constants.inc b/constants/gba_constants.inc index 13cbadf802..3ff857ee8d 100644 --- a/constants/gba_constants.inc +++ b/constants/gba_constants.inc @@ -26,9 +26,9 @@ .set OAM, 0x7000000 - .set SOUND_INFO_PTR, IWRAM_END - 0x10 - .set INTR_CHECK, IWRAM_END - 0x8 - .set INTR_VECTOR, IWRAM_END - 0x4 + .set SOUND_INFO_PTR, 0x3007FF0 + .set INTR_CHECK, 0x3007FF8 + .set INTR_VECTOR, 0x3007FFC .set INTR_FLAG_VBLANK, 1 << 0 .set INTR_FLAG_HBLANK, 1 << 1 diff --git a/constants/m4a_constants.inc b/constants/m4a_constants.inc index 62ca5bb55b..08d888acda 100644 --- a/constants/m4a_constants.inc +++ b/constants/m4a_constants.inc @@ -2,11 +2,41 @@ .equiv PCM_DMA_BUF_SIZE, 1584 + .equiv C_V, 0x40 + .equiv TONEDATA_TYPE_CGB, 0x07 .equiv TONEDATA_TYPE_FIX, 0x08 + .equiv TONEDATA_TYPE_REV, 0x10 + .equiv TONEDATA_TYPE_CMP, 0x20 .equiv TONEDATA_TYPE_SPL, 0x40 @ key split .equiv TONEDATA_TYPE_RHY, 0x80 @ rhythm + .equiv TONEDATA_P_S_PAN, 0xc0 + + .equiv SOUND_CHANNEL_SF_START, 0x80 + .equiv SOUND_CHANNEL_SF_STOP, 0x40 + .equiv SOUND_CHANNEL_SF_SPECIAL, 0x20 + .equiv SOUND_CHANNEL_SF_LOOP, 0x10 + .equiv SOUND_CHANNEL_SF_IEC, 0x04 + .equiv SOUND_CHANNEL_SF_ENV, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_ATTACK, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_DECAY, 0x02 + .equiv SOUND_CHANNEL_SF_ENV_SUSTAIN, 0x01 + .equiv SOUND_CHANNEL_SF_ENV_RELEASE, 0x00 + .equiv SOUND_CHANNEL_SF_ON, (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) + + .equiv CGB_CHANNEL_MO_PIT, 0x02 + .equiv CGB_CHANNEL_MO_VOL, 0x01 + + .equiv WAVE_DATA_FLAG_LOOP, 0xC0 + + .equiv MPT_FLG_VOLSET, 0x01 + .equiv MPT_FLG_VOLCHG, 0x03 + .equiv MPT_FLG_PITSET, 0x04 + .equiv MPT_FLG_PITCHG, 0x0C + .equiv MPT_FLG_START, 0x40 + .equiv MPT_FLG_EXIST, 0x80 + .macro struct_begin .struct 0 .endm @@ -16,6 +46,28 @@ .struct \name + \size .endm + struct_begin + struct_field o_WaveData_type, 2 + struct_field o_WaveData_d1, 1 + struct_field o_WaveData_flags, 1 + struct_field o_WaveData_freq, 4 + struct_field o_WaveData_loopStart, 4 + struct_field o_WaveData_size, 4 + struct_field o_WaveData_data, 0 + struct_field WaveData_size, 0 + + struct_begin + struct_field o_ToneData_type, 1 + struct_field o_ToneData_key, 1 + struct_field o_ToneData_length, 1 + struct_field o_ToneData_pan_sweep, 1 + struct_field o_ToneData_wav, 4 + struct_field o_ToneData_attack, 1 + struct_field o_ToneData_decay, 1 + struct_field o_ToneData_sustain, 1 + struct_field o_ToneData_release, 1 + struct_field ToneData_size, 0 + struct_begin struct_field o_SoundInfo_ident, 4 struct_field o_SoundInfo_pcmDmaCounter, 1 @@ -32,8 +84,8 @@ struct_field o_SoundInfo_pcmFreq, 4 struct_field o_SoundInfo_divFreq, 4 struct_field o_SoundInfo_cgbChans, 4 - struct_field o_SoundInfo_func, 4 - struct_field o_SoundInfo_intp, 4 + struct_field o_SoundInfo_MPlayMainHead, 4 + struct_field o_SoundInfo_musicPlayerHead, 4 struct_field o_SoundInfo_CgbSound, 4 struct_field o_SoundInfo_CgbOscOff, 4 struct_field o_SoundInfo_MidiKeyToCgbFreq, 4 @@ -46,7 +98,7 @@ struct_field SoundInfo_size, 0 struct_begin - struct_field o_SoundChannel_status, 1 + struct_field o_SoundChannel_statusFlags, 1 struct_field o_SoundChannel_type, 1 struct_field o_SoundChannel_rightVolume, 1 struct_field o_SoundChannel_leftVolume, 1 @@ -54,29 +106,29 @@ struct_field o_SoundChannel_decay, 1 struct_field o_SoundChannel_sustain, 1 struct_field o_SoundChannel_release, 1 - struct_field o_SoundChannel_ky, 1 - struct_field o_SoundChannel_ev, 1 - struct_field o_SoundChannel_er, 1 - struct_field o_SoundChannel_el, 1 - struct_field o_SoundChannel_iev, 1 - struct_field o_SoundChannel_iel, 1 - struct_field o_SoundChannel_d1, 1 - struct_field o_SoundChannel_d2, 1 - struct_field o_SoundChannel_gt, 1 - struct_field o_SoundChannel_mk, 1 - struct_field o_SoundChannel_ve, 1 - struct_field o_SoundChannel_pr, 1 - struct_field o_SoundChannel_rp, 1 - struct_field o_SoundChannel_d3, 3 - struct_field o_SoundChannel_ct, 4 + struct_field o_SoundChannel_key, 1 + struct_field o_SoundChannel_envelopeVolume, 1 + struct_field o_SoundChannel_envelopeVolumeRight, 1 + struct_field o_SoundChannel_envelopeVolumeLeft, 1 + struct_field o_SoundChannel_pseudoEchoVolume, 1 + struct_field o_SoundChannel_pseudoEchoLength, 1 + struct_field o_SoundChannel_dummy1, 1 + struct_field o_SoundChannel_dummy2, 1 + struct_field o_SoundChannel_gateTime, 1 + struct_field o_SoundChannel_midiKey, 1 + struct_field o_SoundChannel_velocity, 1 + struct_field o_SoundChannel_priority, 1 + struct_field o_SoundChannel_rhythmPan, 1 + struct_field o_SoundChannel_dummy3, 3 + struct_field o_SoundChannel_count, 4 struct_field o_SoundChannel_fw, 4 - struct_field o_SoundChannel_freq, 4 + struct_field o_SoundChannel_frequency, 4 struct_field o_SoundChannel_wav, 4 - struct_field o_SoundChannel_cp, 4 + struct_field o_SoundChannel_currentPointer, 4 struct_field o_SoundChannel_track, 4 - struct_field o_SoundChannel_pp, 4 - struct_field o_SoundChannel_np, 4 - struct_field o_SoundChannel_d4, 4 + struct_field o_SoundChannel_prevChannelPointer, 4 + struct_field o_SoundChannel_nextChannelPointer, 4 + struct_field o_SoundChannel_dummy4, 4 struct_field o_SoundChannel_xpi, 2 struct_field o_SoundChannel_xpc, 2 struct_field SoundChannel_size, 0 @@ -112,8 +164,8 @@ struct_field o_MusicPlayerTrack_lfoDelay, 1 struct_field o_MusicPlayerTrack_lfoDelayC, 1 struct_field o_MusicPlayerTrack_priority, 1 - struct_field o_MusicPlayerTrack_echoVolume, 1 - struct_field o_MusicPlayerTrack_echoLength, 1 + struct_field o_MusicPlayerTrack_pseudoEchoVolume, 1 + struct_field o_MusicPlayerTrack_pseudoEchoLength, 1 struct_field o_MusicPlayerTrack_chan, 4 struct_field o_MusicPlayerTrack_ToneData_type, 1 struct_field o_MusicPlayerTrack_ToneData_key, 1 @@ -159,41 +211,41 @@ struct_field MusicPlayerInfo_size, 0 struct_begin - struct_field o_CgbChannel_sf, 1 - struct_field o_CgbChannel_ty, 1 + struct_field o_CgbChannel_statusFlags, 1 + struct_field o_CgbChannel_type, 1 struct_field o_CgbChannel_rightVolume, 1 struct_field o_CgbChannel_leftVolume, 1 - struct_field o_CgbChannel_at, 1 - struct_field o_CgbChannel_de, 1 - struct_field o_CgbChannel_su, 1 - struct_field o_CgbChannel_re, 1 - struct_field o_CgbChannel_ky, 1 - struct_field o_CgbChannel_ev, 1 - struct_field o_CgbChannel_eg, 1 - struct_field o_CgbChannel_ec, 1 - struct_field o_CgbChannel_echoVolume, 1 - struct_field o_CgbChannel_echoLength, 1 - struct_field o_CgbChannel_d1, 1 - struct_field o_CgbChannel_d2, 1 - struct_field o_CgbChannel_gt, 1 - struct_field o_CgbChannel_mk, 1 - struct_field o_CgbChannel_ve, 1 - struct_field o_CgbChannel_pr, 1 - struct_field o_CgbChannel_rp, 1 - struct_field o_CgbChannel_d3, 3 - struct_field o_CgbChannel_d5, 1 - struct_field o_CgbChannel_sg, 1 + struct_field o_CgbChannel_attack, 1 + struct_field o_CgbChannel_decay, 1 + struct_field o_CgbChannel_sustain, 1 + struct_field o_CgbChannel_release, 1 + struct_field o_CgbChannel_key, 1 + struct_field o_CgbChannel_envelopeVolume, 1 + struct_field o_CgbChannel_envelopeGoal, 1 + struct_field o_CgbChannel_envelopeCounter, 1 + struct_field o_CgbChannel_pseudoEchoVolume, 1 + struct_field o_CgbChannel_pseudoEchoLength, 1 + struct_field o_CgbChannel_dummy1, 1 + struct_field o_CgbChannel_dummy2, 1 + struct_field o_CgbChannel_gateTime, 1 + struct_field o_CgbChannel_midiKey, 1 + struct_field o_CgbChannel_velocity, 1 + struct_field o_CgbChannel_priority, 1 + struct_field o_CgbChannel_rhythmPan, 1 + struct_field o_CgbChannel_dummy3, 3 + struct_field o_CgbChannel_dummy5, 1 + struct_field o_CgbChannel_sustainGoal, 1 struct_field o_CgbChannel_n4, 1 struct_field o_CgbChannel_pan, 1 struct_field o_CgbChannel_panMask, 1 - struct_field o_CgbChannel_mo, 1 - struct_field o_CgbChannel_le, 1 - struct_field o_CgbChannel_sw, 1 - struct_field o_CgbChannel_fr, 4 - struct_field o_CgbChannel_wp, 4 - struct_field o_CgbChannel_cp, 4 - struct_field o_CgbChannel_tp, 4 - struct_field o_CgbChannel_pp, 4 - struct_field o_CgbChannel_np, 4 - struct_field o_CgbChannel_d4, 8 + struct_field o_CgbChannel_modify, 1 + struct_field o_CgbChannel_length, 1 + struct_field o_CgbChannel_sweep, 1 + struct_field o_CgbChannel_frequency, 4 + struct_field o_CgbChannel_wavePointer, 4 + struct_field o_CgbChannel_currentPointer, 4 + struct_field o_CgbChannel_track, 4 + struct_field o_CgbChannel_prevChannelPointer, 4 + struct_field o_CgbChannel_nextChannelPointer, 4 + struct_field o_CgbChannel_dummy4, 8 struct_field CgbChannel_size, 0 diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index 1c7bff51c8..d1dd1caed0 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -2324,14 +2324,18 @@ AI_CV_SemiInvulnerable: @ BUG: The scripts for checking type-resistance to weather for semi-invulnerable moves are swapped @ The result is that the AI is encouraged to stall while taking damage from weather -@ To fix, swap _CheckSandstormTypes/_CheckIceType in the below script AI_CV_SemiInvulnerable2: if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_SemiInvulnerable_TryEncourage if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_SemiInvulnerable_TryEncourage if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_SemiInvulnerable_TryEncourage get_weather + .ifdef BUGFIX + if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckIceType + if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckSandstormTypes + .else if_equal AI_WEATHER_HAIL, AI_CV_SemiInvulnerable_CheckSandstormTypes if_equal AI_WEATHER_SANDSTORM, AI_CV_SemiInvulnerable_CheckIceType + .endif goto AI_CV_SemiInvulnerable5 AI_CV_SemiInvulnerable_CheckSandstormTypes: @@ -2398,9 +2402,13 @@ AI_CV_Hail_ScoreDown1: AI_CV_Hail_End: end -@ BUG: Facade score is increased if the target is statused, but should be if the user is. Replace AI_TARGET with AI_USER +@ BUG: Facade score is increased if the target is statused, but should be if the user is AI_CV_Facade: + .ifdef BUGFIX + if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End + .else if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End + .endif score +1 AI_CV_Facade_End: end diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index b4bb339931..2344007a5c 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -374,41 +374,41 @@ gBattleAnims_Moves:: .align 2 gBattleAnims_StatusConditions:: - .4byte Status_Poison - .4byte Status_Confusion - .4byte Status_Burn - .4byte Status_Infatuation - .4byte Status_Sleep - .4byte Status_Paralysis - .4byte Status_Freeze - .4byte Status_Curse - .4byte Status_Nightmare + .4byte Status_Poison @ B_ANIM_STATUS_PSN + .4byte Status_Confusion @ B_ANIM_STATUS_CONFUSION + .4byte Status_Burn @ B_ANIM_STATUS_BRN + .4byte Status_Infatuation @ B_ANIM_STATUS_INFATUATION + .4byte Status_Sleep @ B_ANIM_STATUS_SLP + .4byte Status_Paralysis @ B_ANIM_STATUS_PRZ + .4byte Status_Freeze @ B_ANIM_STATUS_FRZ + .4byte Status_Curse @ B_ANIM_STATUS_CURSED + .4byte Status_Nightmare @ B_ANIM_STATUS_NIGHTMARE .align 2 gBattleAnims_General:: - .4byte General_CastformChange - .4byte General_StatsChange - .4byte General_SubstituteFade - .4byte General_SubstituteAppear - .4byte General_PokeblockThrow - .4byte General_ItemKnockoff - .4byte General_TurnTrap - .4byte General_HeldItemEffect - .4byte General_SmokeballEscape - .4byte General_FocusBand - .4byte General_Rain - .4byte General_Sun - .4byte General_Sandstorm - .4byte General_Hail - .4byte General_LeechSeedDrain - .4byte General_MonHit - .4byte General_ItemSteal - .4byte General_SnatchMove - .4byte General_FutureSightHit - .4byte General_DoomDesireHit - .4byte General_FocusPunchSetUp - .4byte General_IngrainHeal - .4byte General_WishHeal + .4byte General_CastformChange @ B_ANIM_CASTFORM_CHANGE + .4byte General_StatsChange @ B_ANIM_STATS_CHANGE + .4byte General_SubstituteFade @ B_ANIM_SUBSTITUTE_FADE + .4byte General_SubstituteAppear @ B_ANIM_SUBSTITUTE_APPEAR + .4byte General_PokeblockThrow @ B_ANIM_POKEBLOCK_THROW + .4byte General_ItemKnockoff @ B_ANIM_ITEM_KNOCKOFF + .4byte General_TurnTrap @ B_ANIM_TURN_TRAP + .4byte General_HeldItemEffect @ B_ANIM_HELD_ITEM_EFFECT + .4byte General_SmokeballEscape @ B_ANIM_SMOKEBALL_ESCAPE + .4byte General_FocusBand @ B_ANIM_FOCUS_BAND + .4byte General_Rain @ B_ANIM_RAIN_CONTINUES + .4byte General_Sun @ B_ANIM_SUN_CONTINUES + .4byte General_Sandstorm @ B_ANIM_SANDSTORM_CONTINUES + .4byte General_Hail @ B_ANIM_HAIL_CONTINUES + .4byte General_LeechSeedDrain @ B_ANIM_LEECH_SEED_DRAIN + .4byte General_MonHit @ B_ANIM_MON_HIT + .4byte General_ItemSteal @ B_ANIM_ITEM_STEAL + .4byte General_SnatchMove @ B_ANIM_SNATCH_MOVE + .4byte General_FutureSightHit @ B_ANIM_FUTURE_SIGHT_HIT + .4byte General_DoomDesireHit @ B_ANIM_DOOM_DESIRE_HIT + .4byte General_FocusPunchSetUp @ B_ANIM_FOCUS_PUNCH_SETUP + .4byte General_IngrainHeal @ B_ANIM_INGRAIN_HEAL + .4byte General_WishHeal @ B_ANIM_WISH_HEAL .align 2 gBattleAnims_Special:: diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 873425c638..bf8ab19c15 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3834,7 +3834,7 @@ BattleScript_MoveUsedIsConfusedNoMore:: return BattleScript_PrintPayDayMoneyString:: - printstring STRINGID_PKMNPICKEDUPITEM + printstring STRINGID_PLAYERPICKEDUPMONEY waitmessage 0x40 return diff --git a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc index 48d2bcc3ad..e856971467 100644 --- a/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryPreBattleRoom/scripts.inc @@ -168,7 +168,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_SwapMons:: @ 8259DF2 fadescreen FADE_TO_BLACK factory_swapmons waitstate - compare VAR_RESULT, 1 + compare VAR_RESULT, TRUE @ Did player keep current pokemon goto_if_eq BattleFrontier_BattleFactoryPreBattleRoom_EventScript_EnterBattleRoom factory_setswapped msgbox BattleFrontier_BattleFactoryPreBattleRoom_Text_YourSwapIsComplete, MSGBOX_DEFAULT diff --git a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc index 493588b4dd..cc623e2166 100644 --- a/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerBattleRoom/scripts.inc @@ -443,7 +443,7 @@ BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyMultis:: @ 82421F2 end BattleFrontier_BattleTowerBattleRoom_EventScript_WarpToLobbyLinkMultis:: @ 82421FC - tower_unklink + tower_closelink warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY, 255, 18, 6 waitstate end diff --git a/data/maps/FortreeCity/map.json b/data/maps/FortreeCity/map.json index 86d43693ac..fd23e6ffd6 100644 --- a/data/maps/FortreeCity/map.json +++ b/data/maps/FortreeCity/map.json @@ -104,7 +104,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 25, "y": 8, "elevation": 3, diff --git a/data/maps/LilycoveCity_House1/map.json b/data/maps/LilycoveCity_House1/map.json index bd6850f5a7..cbd7cdbdf6 100644 --- a/data/maps/LilycoveCity_House1/map.json +++ b/data/maps/LilycoveCity_House1/map.json @@ -28,7 +28,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 4, "y": 4, "elevation": 3, diff --git a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc index 667f441146..eb081dbbbb 100644 --- a/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc +++ b/data/maps/MossdeepCity_SpaceCenter_1F/scripts.inc @@ -247,7 +247,11 @@ MossdeepCity_SpaceCenter_1F_EventScript_Grunt2:: @ 822321F copyobjectxytoperm LOCALID_STAIR_GRUNT switch VAR_FACING case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsWest - case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast @ BUG: This was meant to be case DIR_EAST + #ifdef BUGFIX + case DIR_EAST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast + #else + case DIR_WEST, MossdeepCity_SpaceCenter_1F_EventScript_MoveGruntFromStairsEast + #endif applymovement LOCALID_STAIR_GRUNT, MossdeepCity_SpaceCenter_1F_Movement_MoveGruntFromStairs waitmovement 0 setvar VAR_MOSSDEEP_SPACE_CENTER_STAIR_GUARD_STATE, 2 diff --git a/data/maps/Route117/map.json b/data/maps/Route117/map.json index d2f45e256f..dd923a7cdd 100644 --- a/data/maps/Route117/map.json +++ b/data/maps/Route117/map.json @@ -78,7 +78,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 39, "y": 4, "elevation": 3, diff --git a/data/maps/Route119/map.json b/data/maps/Route119/map.json index fa6391a34e..8d78d1065b 100644 --- a/data/maps/Route119/map.json +++ b/data/maps/Route119/map.json @@ -468,7 +468,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 31, "y": 6, "elevation": 3, @@ -481,7 +481,7 @@ "flag": "FLAG_HIDE_ROUTE_119_KECLEON_1" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 25, "y": 15, "elevation": 3, diff --git a/data/maps/Route120/map.json b/data/maps/Route120/map.json index 8a7e56ddc3..787f51361a 100644 --- a/data/maps/Route120/map.json +++ b/data/maps/Route120/map.json @@ -403,7 +403,7 @@ "flag": "FLAG_ITEM_ROUTE_120_HYPER_POTION" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 12, "y": 16, "elevation": 4, @@ -412,8 +412,8 @@ "movement_range_y": 1, "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", - "script": "Route120_EventScript_InvisibleBridgeKecleon", - "flag": "FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_INVISIBLE" + "script": "Route120_EventScript_BridgeKecleon", + "flag": "FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE" }, { "graphics_id": "OBJ_EVENT_GFX_STEVEN", @@ -481,7 +481,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_2", + "graphics_id": "OBJ_EVENT_GFX_KECLEON_BRIDGE_SHADOW", "x": 12, "y": 16, "elevation": 3, @@ -491,10 +491,10 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "0x0", - "flag": "FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_VISIBLE" + "flag": "FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_SHADOW" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 20, "y": 11, "elevation": 3, @@ -507,7 +507,7 @@ "flag": "FLAG_HIDE_ROUTE_120_KECLEON_1" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 27, "y": 2, "elevation": 3, @@ -520,7 +520,7 @@ "flag": "FLAG_HIDE_ROUTE_120_KECLEON_2" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 4, "y": 77, "elevation": 3, @@ -533,7 +533,7 @@ "flag": "FLAG_HIDE_ROUTE_120_KECLEON_3" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 7, "y": 51, "elevation": 3, @@ -546,7 +546,7 @@ "flag": "FLAG_HIDE_ROUTE_120_KECLEON_5" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 19, "y": 48, "elevation": 3, diff --git a/data/maps/Route120/scripts.inc b/data/maps/Route120/scripts.inc index 7ec3e1221d..0056acbd79 100644 --- a/data/maps/Route120/scripts.inc +++ b/data/maps/Route120/scripts.inc @@ -1,6 +1,6 @@ -.set LOCALID_INVISIBLE_BRIDGE_KECLEON, 30 +.set LOCALID_BRIDGE_KECLEON, 30 .set LOCALID_STEVEN, 31 -.set LOCALID_VISIBLE_BRIDGE_KECLEON, 36 +.set LOCALID_BRIDGE_KECLEON_SHADOW, 36 @ They use a second object which is identical to Kecleon but has a reflection palette tag for the bridge shadow Route120_MapScripts:: @ 81F53EC map_script MAP_SCRIPT_ON_RESUME, Route120_OnResume @@ -31,8 +31,8 @@ Route120_EventScript_RemoveBridgeKecleon:: @ 81F5449 specialvar VAR_RESULT, GetBattleOutcome compare VAR_RESULT, B_OUTCOME_CAUGHT goto_if_ne Common_EventScript_NopReturn - removeobject LOCALID_INVISIBLE_BRIDGE_KECLEON - removeobject LOCALID_VISIBLE_BRIDGE_KECLEON + removeobject LOCALID_BRIDGE_KECLEON + removeobject LOCALID_BRIDGE_KECLEON_SHADOW return Route120_EventScript_RemoveKecleon:: @ 81F5460 @@ -61,7 +61,7 @@ Route120_EventScript_SetBridgeClearMetatiles:: @ 81F54A3 return Route120_EventScript_SetBridgeKecleonMovement:: @ 81F54C8 - setobjectmovementtype LOCALID_VISIBLE_BRIDGE_KECLEON, MOVEMENT_TYPE_FACE_RIGHT + setobjectmovementtype LOCALID_BRIDGE_KECLEON_SHADOW, MOVEMENT_TYPE_FACE_RIGHT return Route120_OnTransition: @ 81F54CD @@ -205,9 +205,9 @@ Route120_EventScript_StevenBattleKecleon:: @ 81F568B delay 20 msgbox Route120_Text_StevenUsedDevonScope, MSGBOX_DEFAULT closemessage - applymovement LOCALID_INVISIBLE_BRIDGE_KECLEON, Common_Movement_WalkInPlaceFastestRight + applymovement LOCALID_BRIDGE_KECLEON, Common_Movement_WalkInPlaceFastestRight waitmovement 0 - applymovement LOCALID_INVISIBLE_BRIDGE_KECLEON, Movement_KecleonAppears + applymovement LOCALID_BRIDGE_KECLEON, Movement_KecleonAppears waitmovement 0 waitse playmoncry SPECIES_KECLEON, 2 @@ -230,8 +230,8 @@ Route120_EventScript_StevenBattleKecleon:: @ 81F568B Route120_EventScript_RemoveBridgeKecleonPostBattle:: @ 81F571C fadescreenswapbuffers FADE_TO_BLACK - removeobject LOCALID_INVISIBLE_BRIDGE_KECLEON - removeobject LOCALID_VISIBLE_BRIDGE_KECLEON + removeobject LOCALID_BRIDGE_KECLEON + removeobject LOCALID_BRIDGE_KECLEON_SHADOW fadescreenswapbuffers FADE_FROM_BLACK goto Route120_EventScript_StevenGiveDeconScope end @@ -276,7 +276,7 @@ Route120_Movement_ApproachKecleonWest: @ 81F57B9 walk_left step_end -Route120_EventScript_InvisibleBridgeKecleon:: @ 81F57BC +Route120_EventScript_BridgeKecleon:: @ 81F57BC msgbox Kecleon_Text_SomethingUnseeable, MSGBOX_NPC end diff --git a/data/maps/SootopolisCity_House1/map.json b/data/maps/SootopolisCity_House1/map.json index 26c47c4323..29162b8675 100644 --- a/data/maps/SootopolisCity_House1/map.json +++ b/data/maps/SootopolisCity_House1/map.json @@ -28,7 +28,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_KECLEON_1", + "graphics_id": "OBJ_EVENT_GFX_KECLEON", "x": 2, "y": 3, "elevation": 3, diff --git a/data/mystery_event_script_cmd_table.s b/data/mystery_event_script_cmd_table.s index 867b05e07c..6ebc7e9625 100644 --- a/data/mystery_event_script_cmd_table.s +++ b/data/mystery_event_script_cmd_table.s @@ -2,21 +2,21 @@ .align 2 gMysteryEventScriptCmdTable:: @ 82DED2C - .4byte MEScrCmd_nop - .4byte MEScrCmd_checkcompat - .4byte MEScrCmd_end - .4byte MEScrCmd_setmsg - .4byte MEScrCmd_setstatus - .4byte MEScrCmd_runscript - .4byte MEScrCmd_initramscript - .4byte MEScrCmd_setenigmaberry - .4byte MEScrCmd_giveribbon - .4byte MEScrCmd_givenationaldex - .4byte MEScrCmd_addrareword - .4byte MEScrCmd_setrecordmixinggift - .4byte MEScrCmd_givepokemon - .4byte MEScrCmd_addtrainer - .4byte MEScrCmd_enableresetrtc - .4byte MEScrCmd_checksum - .4byte MEScrCmd_crc + .4byte MEScrCmd_nop @ 0x00 + .4byte MEScrCmd_checkcompat @ 0x01 + .4byte MEScrCmd_end @ 0x02 + .4byte MEScrCmd_setmsg @ 0x03 + .4byte MEScrCmd_setstatus @ 0x04 + .4byte MEScrCmd_runscript @ 0x05 + .4byte MEScrCmd_initramscript @ 0x06 + .4byte MEScrCmd_setenigmaberry @ 0x07 + .4byte MEScrCmd_giveribbon @ 0x08 + .4byte MEScrCmd_givenationaldex @ 0x09 + .4byte MEScrCmd_addrareword @ 0x0a + .4byte MEScrCmd_setrecordmixinggift @ 0x0b + .4byte MEScrCmd_givepokemon @ 0x0c + .4byte MEScrCmd_addtrainer @ 0x0d + .4byte MEScrCmd_enableresetrtc @ 0x0e + .4byte MEScrCmd_checksum @ 0x0f + .4byte MEScrCmd_crc @ 0x10 gMysteryEventScriptCmdTableEnd:: diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 2cde7190fe..7edb5c4b71 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -1,232 +1,232 @@ .align 2 gScriptCmdTable:: @ 81DB67C - .4byte ScrCmd_nop - .4byte ScrCmd_nop1 - .4byte ScrCmd_end - .4byte ScrCmd_return - .4byte ScrCmd_call - .4byte ScrCmd_goto - .4byte ScrCmd_goto_if - .4byte ScrCmd_call_if - .4byte ScrCmd_gotostd - .4byte ScrCmd_callstd - .4byte ScrCmd_gotostd_if - .4byte ScrCmd_callstd_if - .4byte ScrCmd_returnram - .4byte ScrCmd_killscript - .4byte ScrCmd_setmysteryeventstatus - .4byte ScrCmd_loadword - .4byte ScrCmd_loadbyte - .4byte ScrCmd_writebytetoaddr - .4byte ScrCmd_loadbytefromaddr - .4byte ScrCmd_setptrbyte - .4byte ScrCmd_copylocal - .4byte ScrCmd_copybyte - .4byte ScrCmd_setvar - .4byte ScrCmd_addvar - .4byte ScrCmd_subvar - .4byte ScrCmd_copyvar - .4byte ScrCmd_setorcopyvar - .4byte ScrCmd_compare_local_to_local - .4byte ScrCmd_compare_local_to_value - .4byte ScrCmd_compare_local_to_addr - .4byte ScrCmd_compare_addr_to_local - .4byte ScrCmd_compare_addr_to_value - .4byte ScrCmd_compare_addr_to_addr - .4byte ScrCmd_compare_var_to_value - .4byte ScrCmd_compare_var_to_var - .4byte ScrCmd_callnative - .4byte ScrCmd_gotonative - .4byte ScrCmd_special - .4byte ScrCmd_specialvar - .4byte ScrCmd_waitstate - .4byte ScrCmd_delay - .4byte ScrCmd_setflag - .4byte ScrCmd_clearflag - .4byte ScrCmd_checkflag - .4byte ScrCmd_initclock - .4byte ScrCmd_dotimebasedevents - .4byte ScrCmd_gettime - .4byte ScrCmd_playse - .4byte ScrCmd_waitse - .4byte ScrCmd_playfanfare - .4byte ScrCmd_waitfanfare - .4byte ScrCmd_playbgm - .4byte ScrCmd_savebgm - .4byte ScrCmd_fadedefaultbgm - .4byte ScrCmd_fadenewbgm - .4byte ScrCmd_fadeoutbgm - .4byte ScrCmd_fadeinbgm - .4byte ScrCmd_warp - .4byte ScrCmd_warpsilent - .4byte ScrCmd_warpdoor - .4byte ScrCmd_warphole - .4byte ScrCmd_warpteleport - .4byte ScrCmd_setwarp - .4byte ScrCmd_setdynamicwarp - .4byte ScrCmd_setdivewarp - .4byte ScrCmd_setholewarp - .4byte ScrCmd_getplayerxy - .4byte ScrCmd_getpartysize - .4byte ScrCmd_additem - .4byte ScrCmd_removeitem - .4byte ScrCmd_checkitemspace - .4byte ScrCmd_checkitem - .4byte ScrCmd_checkitemtype - .4byte ScrCmd_addpcitem - .4byte ScrCmd_checkpcitem - .4byte ScrCmd_adddecoration - .4byte ScrCmd_removedecoration - .4byte ScrCmd_checkdecor - .4byte ScrCmd_checkdecorspace - .4byte ScrCmd_applymovement - .4byte ScrCmd_applymovement_at - .4byte ScrCmd_waitmovement - .4byte ScrCmd_waitmovement_at - .4byte ScrCmd_removeobject - .4byte ScrCmd_removeobject_at - .4byte ScrCmd_addobject - .4byte ScrCmd_addobject_at - .4byte ScrCmd_setobjectxy - .4byte ScrCmd_showobject_at - .4byte ScrCmd_hideobject_at - .4byte ScrCmd_faceplayer - .4byte ScrCmd_turnobject - .4byte ScrCmd_trainerbattle - .4byte ScrCmd_dotrainerbattle - .4byte ScrCmd_gotopostbattlescript - .4byte ScrCmd_gotobeatenscript - .4byte ScrCmd_checktrainerflag - .4byte ScrCmd_settrainerflag - .4byte ScrCmd_cleartrainerflag - .4byte ScrCmd_setobjectxyperm - .4byte ScrCmd_copyobjectxytoperm - .4byte ScrCmd_setobjectmovementtype - .4byte ScrCmd_waitmessage - .4byte ScrCmd_message - .4byte ScrCmd_closemessage - .4byte ScrCmd_lockall - .4byte ScrCmd_lock - .4byte ScrCmd_releaseall - .4byte ScrCmd_release - .4byte ScrCmd_waitbuttonpress - .4byte ScrCmd_yesnobox - .4byte ScrCmd_multichoice - .4byte ScrCmd_multichoicedefault - .4byte ScrCmd_multichoicegrid - .4byte ScrCmd_drawbox - .4byte ScrCmd_erasebox - .4byte ScrCmd_drawboxtext - .4byte ScrCmd_showmonpic - .4byte ScrCmd_hidemonpic - .4byte ScrCmd_showcontestwinner - .4byte ScrCmd_braillemessage - .4byte ScrCmd_givemon - .4byte ScrCmd_giveegg - .4byte ScrCmd_setmonmove - .4byte ScrCmd_checkpartymove - .4byte ScrCmd_bufferspeciesname - .4byte ScrCmd_bufferleadmonspeciesname - .4byte ScrCmd_bufferpartymonnick - .4byte ScrCmd_bufferitemname - .4byte ScrCmd_bufferdecorationname - .4byte ScrCmd_buffermovename - .4byte ScrCmd_buffernumberstring - .4byte ScrCmd_bufferstdstring - .4byte ScrCmd_bufferstring - .4byte ScrCmd_pokemart - .4byte ScrCmd_pokemartdecoration - .4byte ScrCmd_pokemartdecoration2 - .4byte ScrCmd_playslotmachine - .4byte ScrCmd_setberrytree - .4byte ScrCmd_choosecontestmon - .4byte ScrCmd_startcontest - .4byte ScrCmd_showcontestresults - .4byte ScrCmd_contestlinktransfer - .4byte ScrCmd_random - .4byte ScrCmd_addmoney - .4byte ScrCmd_removemoney - .4byte ScrCmd_checkmoney - .4byte ScrCmd_showmoneybox - .4byte ScrCmd_hidemoneybox - .4byte ScrCmd_updatemoneybox - .4byte ScrCmd_getpricereduction - .4byte ScrCmd_fadescreen - .4byte ScrCmd_fadescreenspeed - .4byte ScrCmd_setflashradius - .4byte ScrCmd_animateflash - .4byte ScrCmd_messageautoscroll - .4byte ScrCmd_dofieldeffect - .4byte ScrCmd_setfieldeffectarg - .4byte ScrCmd_waitfieldeffect - .4byte ScrCmd_setrespawn - .4byte ScrCmd_checkplayergender - .4byte ScrCmd_playmoncry - .4byte ScrCmd_setmetatile - .4byte ScrCmd_resetweather - .4byte ScrCmd_setweather - .4byte ScrCmd_doweather - .4byte ScrCmd_setstepcallback - .4byte ScrCmd_setmaplayoutindex - .4byte ScrCmd_setobjectpriority - .4byte ScrCmd_resetobjectpriority - .4byte ScrCmd_createvobject - .4byte ScrCmd_turnvobject - .4byte ScrCmd_opendoor - .4byte ScrCmd_closedoor - .4byte ScrCmd_waitdooranim - .4byte ScrCmd_setdooropen - .4byte ScrCmd_setdoorclosed - .4byte ScrCmd_addelevmenuitem - .4byte ScrCmd_showelevmenu - .4byte ScrCmd_checkcoins - .4byte ScrCmd_addcoins - .4byte ScrCmd_removecoins - .4byte ScrCmd_setwildbattle - .4byte ScrCmd_dowildbattle - .4byte ScrCmd_setvaddress - .4byte ScrCmd_vgoto - .4byte ScrCmd_vcall - .4byte ScrCmd_vgoto_if - .4byte ScrCmd_vcall_if - .4byte ScrCmd_vmessage - .4byte ScrCmd_vloadword - .4byte ScrCmd_vbufferstring - .4byte ScrCmd_showcoinsbox - .4byte ScrCmd_hidecoinsbox - .4byte ScrCmd_updatecoinsbox - .4byte ScrCmd_incrementgamestat - .4byte ScrCmd_setescapewarp - .4byte ScrCmd_waitmoncry - .4byte ScrCmd_bufferboxname - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_nop1 - .4byte ScrCmd_setmonobedient - .4byte ScrCmd_checkmonobedience - .4byte ScrCmd_gotoram - .4byte ScrCmd_nop1 - .4byte ScrCmd_warpD1 - .4byte ScrCmd_setmonmetlocation - .4byte ScrCmd_moverotatingtileobjects - .4byte ScrCmd_turnrotatingtileobjects - .4byte ScrCmd_initrotatingtilepuzzle - .4byte ScrCmd_freerotatingtilepuzzle - .4byte ScrCmd_warpmossdeepgym - .4byte ScrCmd_cmdD8 - .4byte ScrCmd_cmdD9 - .4byte ScrCmd_closebraillemessage - .4byte ScrCmd_cmdDB - .4byte ScrCmd_fadescreenswapbuffers - .4byte ScrCmd_buffertrainerclassname - .4byte ScrCmd_buffertrainername - .4byte ScrCmd_pokenavcall - .4byte ScrCmd_warpsootopolislegend - .4byte ScrCmd_buffercontesttype - .4byte ScrCmd_bufferitemnameplural + .4byte ScrCmd_nop @ 0x00 + .4byte ScrCmd_nop1 @ 0x01 + .4byte ScrCmd_end @ 0x02 + .4byte ScrCmd_return @ 0x03 + .4byte ScrCmd_call @ 0x04 + .4byte ScrCmd_goto @ 0x05 + .4byte ScrCmd_goto_if @ 0x06 + .4byte ScrCmd_call_if @ 0x07 + .4byte ScrCmd_gotostd @ 0x08 + .4byte ScrCmd_callstd @ 0x09 + .4byte ScrCmd_gotostd_if @ 0x0a + .4byte ScrCmd_callstd_if @ 0x0b + .4byte ScrCmd_returnram @ 0x0c + .4byte ScrCmd_killscript @ 0x0d + .4byte ScrCmd_setmysteryeventstatus @ 0x0e + .4byte ScrCmd_loadword @ 0x0f + .4byte ScrCmd_loadbyte @ 0x10 + .4byte ScrCmd_writebytetoaddr @ 0x11 + .4byte ScrCmd_loadbytefromaddr @ 0x12 + .4byte ScrCmd_setptrbyte @ 0x13 + .4byte ScrCmd_copylocal @ 0x14 + .4byte ScrCmd_copybyte @ 0x15 + .4byte ScrCmd_setvar @ 0x16 + .4byte ScrCmd_addvar @ 0x17 + .4byte ScrCmd_subvar @ 0x18 + .4byte ScrCmd_copyvar @ 0x19 + .4byte ScrCmd_setorcopyvar @ 0x1a + .4byte ScrCmd_compare_local_to_local @ 0x1b + .4byte ScrCmd_compare_local_to_value @ 0x1c + .4byte ScrCmd_compare_local_to_addr @ 0x1d + .4byte ScrCmd_compare_addr_to_local @ 0x1e + .4byte ScrCmd_compare_addr_to_value @ 0x1f + .4byte ScrCmd_compare_addr_to_addr @ 0x20 + .4byte ScrCmd_compare_var_to_value @ 0x21 + .4byte ScrCmd_compare_var_to_var @ 0x22 + .4byte ScrCmd_callnative @ 0x23 + .4byte ScrCmd_gotonative @ 0x24 + .4byte ScrCmd_special @ 0x25 + .4byte ScrCmd_specialvar @ 0x26 + .4byte ScrCmd_waitstate @ 0x27 + .4byte ScrCmd_delay @ 0x28 + .4byte ScrCmd_setflag @ 0x29 + .4byte ScrCmd_clearflag @ 0x2a + .4byte ScrCmd_checkflag @ 0x2b + .4byte ScrCmd_initclock @ 0x2c + .4byte ScrCmd_dotimebasedevents @ 0x2d + .4byte ScrCmd_gettime @ 0x2e + .4byte ScrCmd_playse @ 0x2f + .4byte ScrCmd_waitse @ 0x30 + .4byte ScrCmd_playfanfare @ 0x31 + .4byte ScrCmd_waitfanfare @ 0x32 + .4byte ScrCmd_playbgm @ 0x33 + .4byte ScrCmd_savebgm @ 0x34 + .4byte ScrCmd_fadedefaultbgm @ 0x35 + .4byte ScrCmd_fadenewbgm @ 0x36 + .4byte ScrCmd_fadeoutbgm @ 0x37 + .4byte ScrCmd_fadeinbgm @ 0x38 + .4byte ScrCmd_warp @ 0x39 + .4byte ScrCmd_warpsilent @ 0x3a + .4byte ScrCmd_warpdoor @ 0x3b + .4byte ScrCmd_warphole @ 0x3c + .4byte ScrCmd_warpteleport @ 0x3d + .4byte ScrCmd_setwarp @ 0x3e + .4byte ScrCmd_setdynamicwarp @ 0x3f + .4byte ScrCmd_setdivewarp @ 0x40 + .4byte ScrCmd_setholewarp @ 0x41 + .4byte ScrCmd_getplayerxy @ 0x42 + .4byte ScrCmd_getpartysize @ 0x43 + .4byte ScrCmd_additem @ 0x44 + .4byte ScrCmd_removeitem @ 0x45 + .4byte ScrCmd_checkitemspace @ 0x46 + .4byte ScrCmd_checkitem @ 0x47 + .4byte ScrCmd_checkitemtype @ 0x48 + .4byte ScrCmd_addpcitem @ 0x49 + .4byte ScrCmd_checkpcitem @ 0x4a + .4byte ScrCmd_adddecoration @ 0x4b + .4byte ScrCmd_removedecoration @ 0x4c + .4byte ScrCmd_checkdecor @ 0x4d + .4byte ScrCmd_checkdecorspace @ 0x4e + .4byte ScrCmd_applymovement @ 0x4f + .4byte ScrCmd_applymovement_at @ 0x50 + .4byte ScrCmd_waitmovement @ 0x51 + .4byte ScrCmd_waitmovement_at @ 0x52 + .4byte ScrCmd_removeobject @ 0x53 + .4byte ScrCmd_removeobject_at @ 0x54 + .4byte ScrCmd_addobject @ 0x55 + .4byte ScrCmd_addobject_at @ 0x56 + .4byte ScrCmd_setobjectxy @ 0x57 + .4byte ScrCmd_showobject_at @ 0x58 + .4byte ScrCmd_hideobject_at @ 0x59 + .4byte ScrCmd_faceplayer @ 0x5a + .4byte ScrCmd_turnobject @ 0x5b + .4byte ScrCmd_trainerbattle @ 0x5c + .4byte ScrCmd_dotrainerbattle @ 0x5d + .4byte ScrCmd_gotopostbattlescript @ 0x5e + .4byte ScrCmd_gotobeatenscript @ 0x5f + .4byte ScrCmd_checktrainerflag @ 0x60 + .4byte ScrCmd_settrainerflag @ 0x61 + .4byte ScrCmd_cleartrainerflag @ 0x62 + .4byte ScrCmd_setobjectxyperm @ 0x63 + .4byte ScrCmd_copyobjectxytoperm @ 0x64 + .4byte ScrCmd_setobjectmovementtype @ 0x65 + .4byte ScrCmd_waitmessage @ 0x66 + .4byte ScrCmd_message @ 0x67 + .4byte ScrCmd_closemessage @ 0x68 + .4byte ScrCmd_lockall @ 0x69 + .4byte ScrCmd_lock @ 0x6a + .4byte ScrCmd_releaseall @ 0x6b + .4byte ScrCmd_release @ 0x6c + .4byte ScrCmd_waitbuttonpress @ 0x6d + .4byte ScrCmd_yesnobox @ 0x6e + .4byte ScrCmd_multichoice @ 0x6f + .4byte ScrCmd_multichoicedefault @ 0x70 + .4byte ScrCmd_multichoicegrid @ 0x71 + .4byte ScrCmd_drawbox @ 0x72 + .4byte ScrCmd_erasebox @ 0x73 + .4byte ScrCmd_drawboxtext @ 0x74 + .4byte ScrCmd_showmonpic @ 0x75 + .4byte ScrCmd_hidemonpic @ 0x76 + .4byte ScrCmd_showcontestwinner @ 0x77 + .4byte ScrCmd_braillemessage @ 0x78 + .4byte ScrCmd_givemon @ 0x79 + .4byte ScrCmd_giveegg @ 0x7a + .4byte ScrCmd_setmonmove @ 0x7b + .4byte ScrCmd_checkpartymove @ 0x7c + .4byte ScrCmd_bufferspeciesname @ 0x7d + .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e + .4byte ScrCmd_bufferpartymonnick @ 0x7f + .4byte ScrCmd_bufferitemname @ 0x80 + .4byte ScrCmd_bufferdecorationname @ 0x81 + .4byte ScrCmd_buffermovename @ 0x82 + .4byte ScrCmd_buffernumberstring @ 0x83 + .4byte ScrCmd_bufferstdstring @ 0x84 + .4byte ScrCmd_bufferstring @ 0x85 + .4byte ScrCmd_pokemart @ 0x86 + .4byte ScrCmd_pokemartdecoration @ 0x87 + .4byte ScrCmd_pokemartdecoration2 @ 0x88 + .4byte ScrCmd_playslotmachine @ 0x89 + .4byte ScrCmd_setberrytree @ 0x8a + .4byte ScrCmd_choosecontestmon @ 0x8b + .4byte ScrCmd_startcontest @ 0x8c + .4byte ScrCmd_showcontestresults @ 0x8d + .4byte ScrCmd_contestlinktransfer @ 0x8e + .4byte ScrCmd_random @ 0x8f + .4byte ScrCmd_addmoney @ 0x90 + .4byte ScrCmd_removemoney @ 0x91 + .4byte ScrCmd_checkmoney @ 0x92 + .4byte ScrCmd_showmoneybox @ 0x93 + .4byte ScrCmd_hidemoneybox @ 0x94 + .4byte ScrCmd_updatemoneybox @ 0x95 + .4byte ScrCmd_getpricereduction @ 0x96 + .4byte ScrCmd_fadescreen @ 0x97 + .4byte ScrCmd_fadescreenspeed @ 0x98 + .4byte ScrCmd_setflashradius @ 0x99 + .4byte ScrCmd_animateflash @ 0x9a + .4byte ScrCmd_messageautoscroll @ 0x9b + .4byte ScrCmd_dofieldeffect @ 0x9c + .4byte ScrCmd_setfieldeffectarg @ 0x9d + .4byte ScrCmd_waitfieldeffect @ 0x9e + .4byte ScrCmd_setrespawn @ 0x9f + .4byte ScrCmd_checkplayergender @ 0xa0 + .4byte ScrCmd_playmoncry @ 0xa1 + .4byte ScrCmd_setmetatile @ 0xa2 + .4byte ScrCmd_resetweather @ 0xa3 + .4byte ScrCmd_setweather @ 0xa4 + .4byte ScrCmd_doweather @ 0xa5 + .4byte ScrCmd_setstepcallback @ 0xa6 + .4byte ScrCmd_setmaplayoutindex @ 0xa7 + .4byte ScrCmd_setobjectpriority @ 0xa8 + .4byte ScrCmd_resetobjectpriority @ 0xa9 + .4byte ScrCmd_createvobject @ 0xaa + .4byte ScrCmd_turnvobject @ 0xab + .4byte ScrCmd_opendoor @ 0xac + .4byte ScrCmd_closedoor @ 0xad + .4byte ScrCmd_waitdooranim @ 0xae + .4byte ScrCmd_setdooropen @ 0xaf + .4byte ScrCmd_setdoorclosed @ 0xb0 + .4byte ScrCmd_addelevmenuitem @ 0xb1 + .4byte ScrCmd_showelevmenu @ 0xb2 + .4byte ScrCmd_checkcoins @ 0xb3 + .4byte ScrCmd_addcoins @ 0xb4 + .4byte ScrCmd_removecoins @ 0xb5 + .4byte ScrCmd_setwildbattle @ 0xb6 + .4byte ScrCmd_dowildbattle @ 0xb7 + .4byte ScrCmd_setvaddress @ 0xb8 + .4byte ScrCmd_vgoto @ 0xb9 + .4byte ScrCmd_vcall @ 0xba + .4byte ScrCmd_vgoto_if @ 0xbb + .4byte ScrCmd_vcall_if @ 0xbc + .4byte ScrCmd_vmessage @ 0xbd + .4byte ScrCmd_vloadword @ 0xbe + .4byte ScrCmd_vbufferstring @ 0xbf + .4byte ScrCmd_showcoinsbox @ 0xc0 + .4byte ScrCmd_hidecoinsbox @ 0xc1 + .4byte ScrCmd_updatecoinsbox @ 0xc2 + .4byte ScrCmd_incrementgamestat @ 0xc3 + .4byte ScrCmd_setescapewarp @ 0xc4 + .4byte ScrCmd_waitmoncry @ 0xc5 + .4byte ScrCmd_bufferboxname @ 0xc6 + .4byte ScrCmd_nop1 @ 0xc7 + .4byte ScrCmd_nop1 @ 0xc8 + .4byte ScrCmd_nop1 @ 0xc9 + .4byte ScrCmd_nop1 @ 0xca + .4byte ScrCmd_nop1 @ 0xcb + .4byte ScrCmd_nop1 @ 0xcc + .4byte ScrCmd_setmonobedient @ 0xcd + .4byte ScrCmd_checkmonobedience @ 0xce + .4byte ScrCmd_gotoram @ 0xcf + .4byte ScrCmd_nop1 @ 0xd0 + .4byte ScrCmd_warpspinenter @ 0xd1 + .4byte ScrCmd_setmonmetlocation @ 0xd2 + .4byte ScrCmd_moverotatingtileobjects @ 0xd3 + .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 + .4byte ScrCmd_initrotatingtilepuzzle @ 0xd5 + .4byte ScrCmd_freerotatingtilepuzzle @ 0xd6 + .4byte ScrCmd_warpmossdeepgym @ 0xd7 + .4byte ScrCmd_cmdD8 @ 0xd8 + .4byte ScrCmd_cmdD9 @ 0xd9 + .4byte ScrCmd_closebraillemessage @ 0xda + .4byte ScrCmd_cmdDB @ 0xdb + .4byte ScrCmd_fadescreenswapbuffers @ 0xdc + .4byte ScrCmd_buffertrainerclassname @ 0xdd + .4byte ScrCmd_buffertrainername @ 0xde + .4byte ScrCmd_pokenavcall @ 0xdf + .4byte ScrCmd_warpsootopolislegend @ 0xe0 + .4byte ScrCmd_buffercontesttype @ 0xe1 + .4byte ScrCmd_bufferitemnameplural @ 0xe2 gScriptCmdTableEnd:: @ 81DBA08 .4byte ScrCmd_nop diff --git a/data/scripts/new_game.inc b/data/scripts/new_game.inc index f723379729..77102a001f 100644 --- a/data/scripts/new_game.inc +++ b/data/scripts/new_game.inc @@ -1,43 +1,66 @@ EventScript_ResetAllBerries:: @ 827149D + @ Route 102 setberrytree 2, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES setberrytree 1, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES + + @ Route 104 setberrytree 11, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES setberrytree 13, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES setberrytree 4, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES setberrytree 76, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES setberrytree 8, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES setberrytree 10, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + + @ Route 116 setberrytree 25, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES setberrytree 26, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES setberrytree 66, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES setberrytree 67, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES + + @ Route 115 setberrytree 69, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES setberrytree 70, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES setberrytree 71, ITEM_TO_BERRY(ITEM_KELPSY_BERRY), BERRY_STAGE_BERRIES setberrytree 55, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES setberrytree 56, ITEM_TO_BERRY(ITEM_BLUK_BERRY), BERRY_STAGE_BERRIES + + @ Route 103 setberrytree 5, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES setberrytree 6, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES setberrytree 7, ITEM_TO_BERRY(ITEM_CHERI_BERRY), BERRY_STAGE_BERRIES + + @ Route 110 setberrytree 16, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES setberrytree 17, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES setberrytree 18, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + + @ Route 117 setberrytree 29, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 28, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 27, ITEM_TO_BERRY(ITEM_WEPEAR_BERRY), BERRY_STAGE_BERRIES + + @ Route 112 setberrytree 24, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES setberrytree 23, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES setberrytree 22, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES setberrytree 21, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES + + @ Route 111 setberrytree 19, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES setberrytree 20, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES setberrytree 80, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES setberrytree 81, ITEM_TO_BERRY(ITEM_ORAN_BERRY), BERRY_STAGE_BERRIES + + @ Route 114 setberrytree 77, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES setberrytree 78, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES setberrytree 68, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES + + @ Route 118 setberrytree 31, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES setberrytree 33, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES + + @ Route 119 setberrytree 34, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES setberrytree 35, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES setberrytree 36, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES @@ -45,6 +68,8 @@ EventScript_ResetAllBerries:: @ 827149D setberrytree 84, ITEM_TO_BERRY(ITEM_HONDEW_BERRY), BERRY_STAGE_BERRIES setberrytree 85, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES setberrytree 86, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES + + @ Route 120 setberrytree 37, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 38, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 39, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES @@ -55,12 +80,16 @@ EventScript_ResetAllBerries:: @ 827149D setberrytree 45, ITEM_TO_BERRY(ITEM_PINAP_BERRY), BERRY_STAGE_BERRIES setberrytree 44, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES setberrytree 43, ITEM_TO_BERRY(ITEM_RAZZ_BERRY), BERRY_STAGE_BERRIES + + @ Route 121 setberrytree 47, ITEM_TO_BERRY(ITEM_PERSIM_BERRY), BERRY_STAGE_BERRIES setberrytree 48, ITEM_TO_BERRY(ITEM_ASPEAR_BERRY), BERRY_STAGE_BERRIES setberrytree 49, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES setberrytree 50, ITEM_TO_BERRY(ITEM_CHESTO_BERRY), BERRY_STAGE_BERRIES setberrytree 52, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES setberrytree 53, ITEM_TO_BERRY(ITEM_NANAB_BERRY), BERRY_STAGE_BERRIES + + @ Route 123 setberrytree 62, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES setberrytree 64, ITEM_TO_BERRY(ITEM_LEPPA_BERRY), BERRY_STAGE_BERRIES setberrytree 58, ITEM_TO_BERRY(ITEM_POMEG_BERRY), BERRY_STAGE_BERRIES @@ -78,6 +107,8 @@ EventScript_ResetAllBerries:: @ 827149D setberrytree 87, ITEM_TO_BERRY(ITEM_PECHA_BERRY), BERRY_STAGE_BERRIES setberrytree 88, ITEM_TO_BERRY(ITEM_SITRUS_BERRY), BERRY_STAGE_BERRIES setberrytree 89, ITEM_TO_BERRY(ITEM_RAWST_BERRY), BERRY_STAGE_BERRIES + + @ Mirage Island setberrytree 82, ITEM_TO_BERRY(ITEM_LIECHI_BERRY), BERRY_STAGE_BERRIES return diff --git a/data/scripts/secret_base.inc b/data/scripts/secret_base.inc index 132bdd19ca..4a20de9a6b 100644 --- a/data/scripts/secret_base.inc +++ b/data/scripts/secret_base.inc @@ -308,7 +308,7 @@ SecretBase_EventScript_PutAwayDecorationLoop:: @ 8275D39 compare VAR_0x8005, 0 goto_if_eq SecretBase_EventScript_PutAwayDecorationLoop removeobject VAR_0x8006 - setflag VAR_0x8005 @ UB: GF likely meant setvar here; setflag 0x8005 is out of bounds + setflag VAR_0x8005 @ UB: VAR_0x8005 is set to a flag by PutAwayDecorationIteration, but ScrCmd_setflag doesn't use VarGet goto SecretBase_EventScript_PutAwayDecorationLoop end diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 3d294f5cfd..ce06c14898 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -1,7 +1,7 @@ # Bugs and Glitches -These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. +These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. Defining the `BUGFIX` and `UBFIX` preprocessor variables will fix some of these automatically. `UBFIX` will already be defined for MODERN builds. Fixes are written in the `diff` format. If you've used Git before, this should look familiar: @@ -13,55 +13,9 @@ Fixes are written in the `diff` format. If you've used Git before, this should l ## Contents -- [RNG does not get seeded](#rng-does-not-get-seeded) - [Scrolling through items in the bag causes the image to flicker](#scrolling-through-items-in-the-bag-causes-the-image-to-flicker) -## RNG does not get seeded - -**Fix:** Add the following function to [src/main.c](https://github.com/pret/pokeemerald/blob/master/src/main.c): -```diff -+static void SeedRngWithRtc(void) -+{ -+ u32 seed = RtcGetMinuteCount(); -+ seed = (seed >> 16) ^ (seed & 0xFFFF); -+ SeedRng(seed); -+} -``` - -And edit `AgbMain`: - -```diff - ... - RtcInit(); - CheckForFlashMemory(); - InitMainCallbacks(); - InitMapMusic(); -+ SeedRngWithRtc(); - ClearDma3Requests(); - ... -``` - -This restores the code of Ruby/Sapphire. - -**Alternate Fix:** Edit the following function in [src/title_screen.c](https://github.com/pret/pokeemerald/blob/master/src/title_screen.c): - -```diff -void CB2_InitTitleScreen(void) -{ - switch (gMain.state) - { - default: - case 0: - SetVBlankCallback(NULL); -+ StartTimer1(); - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - ... -``` -This matches with the code of FR/LG and does what GF originally wanted to do. - ## Scrolling through items in the bag causes the image to flicker **Fix:** Add the following function to [src/item_menu_icons.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu_icons.c): @@ -89,9 +43,9 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p ```diff ... { -- RemoveBagItemIconSprite(1 ^ gBagMenu->unk81B_1); -+ HideBagItemIconSprite(gBagMenu->unk81B_1 ^ 1); -+ RemoveBagItemIconSprite(gBagMenu->unk81B_1); - if (a != -2) +- RemoveBagItemIconSprite(1 ^ gBagMenu->itemIconSlot); ++ HideBagItemIconSprite(gBagMenu->itemIconSlot ^ 1); ++ RemoveBagItemIconSprite(gBagMenu->itemIconSlot); + if (itemIndex != LIST_CANCEL) ... ``` diff --git a/gflib/bg.c b/gflib/bg.c index 12c42d1248..66dd81a25e 100644 --- a/gflib/bg.c +++ b/gflib/bg.c @@ -34,8 +34,8 @@ struct BgConfig2 u32 unk_3:18; void* tilemap; - s32 bg_x; // Maybe unsigned, but game treats it as if it is signed a LOT. - s32 bg_y; // Same for this variable. + s32 bg_x; + s32 bg_y; }; static struct BgControl sGpuBgConfigs; @@ -621,15 +621,17 @@ s32 GetBgX(u8 bg) { if (IsInvalidBg32(bg)) return -1; - if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return -1; - return sGpuBgConfigs2[bg].bg_x; + else + return sGpuBgConfigs2[bg].bg_x; } s32 ChangeBgY(u8 bg, s32 value, u8 op) { u8 mode; - u16 temp1, temp2; + u16 temp1; + u16 temp2; if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) { @@ -698,7 +700,8 @@ s32 ChangeBgY(u8 bg, s32 value, u8 op) s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op) { u8 mode; - u16 temp1, temp2; + u16 temp1; + u16 temp2; if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) { @@ -769,9 +772,10 @@ s32 GetBgY(u8 bg) { if (IsInvalidBg32(bg)) return -1; - if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return -1; - return sGpuBgConfigs2[bg].bg_y; + else + return sGpuBgConfigs2[bg].bg_y; } void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) @@ -870,77 +874,81 @@ void* GetBgTilemapBuffer(u8 bg) { if (IsInvalidBg32(bg)) return NULL; - if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) + else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) return NULL; - return sGpuBgConfigs2[bg].tilemap; + else + return sGpuBgConfigs2[bg].tilemap; } void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset) { - if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) - return; - if (mode != 0) - CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); - else - LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); + if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) + { + if (mode != 0) + CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); + else + LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); + } } void CopyBgTilemapBufferToVram(u8 bg) { u16 sizeToLoad; - if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) - return; - - switch (GetBgType(bg)) + if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) { - case 0: - sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; - break; - case 1: - sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; - break; - default: - sizeToLoad = 0; - break; + switch (GetBgType(bg)) + { + case 0: + sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; + break; + case 1: + sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; + break; + default: + sizeToLoad = 0; + break; + } + LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2); } - LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2); } -void CopyToBgTilemapBufferRect(u8 bg, const void *src, u8 destX, u8 destY, u8 width, u8 height) +void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) { - u16 destX16, destY16; + u16 destX16; + u16 destY16; u16 mode; - if (IsInvalidBg32(bg) || IsTileMapOutsideWram(bg)) - return; - switch (GetBgType(bg)) + if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) { - case 0: - { - const u16 *srcCopy = src; - for (destY16 = destY; destY16 < (destY + height); destY16++) + switch (GetBgType(bg)) { - for (destX16 = destX; destX16 < (destX + width); destX16++) - { - ((u16 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; - } - } - break; - } - case 1: - { - const u8 *srcCopy = src; - mode = GetBgMetricAffineMode(bg, 0x1); - for (destY16 = destY; destY16 < (destY + height); destY16++) + case 0: { - for (destX16 = destX; destX16 < (destX + width); destX16++) + const u16 * srcCopy = src; + for (destY16 = destY; destY16 < (destY + height); destY16++) { - ((u8 *)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; + for (destX16 = destX; destX16 < (destX + width); destX16++) + { + ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; + } } + break; + } + case 1: + { + const u8 * srcCopy = src; + mode = GetBgMetricAffineMode(bg, 0x1); + for (destY16 = destY; destY16 < (destY + height); destY16++) + { + for (destX16 = destX; destX16 < (destX + width); destX16++) + { + ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; + } + } + break; + } } - break; - } } } diff --git a/gflib/blit.c b/gflib/blit.c index 26a63fe9bb..bdbb2e2fdb 100644 --- a/gflib/blit.c +++ b/gflib/blit.c @@ -76,7 +76,7 @@ void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 hei s32 yEnd; s32 multiplierY; s32 loopX, loopY; - s32 toOrr1, toOrr2; + u8 toOrr1, toOrr2; xEnd = x + width; if (xEnd > surface->width) @@ -87,8 +87,8 @@ void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 hei yEnd = surface->height; multiplierY = (surface->width + (surface->width & 7)) >> 3; - toOrr1 = (u32)(fillValue << 0x1C) >> 0x18; - toOrr2 = (fillValue & 0xF); + toOrr1 = fillValue << 4; + toOrr2 = fillValue & 0xF; for (loopY = y; loopY < yEnd; loopY++) { diff --git a/gflib/sprite.c b/gflib/sprite.c index c7e3d09a32..2616aeaedc 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -1320,6 +1320,11 @@ void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnim s16 ConvertScaleParam(s16 scale) { s32 val = 0x10000; + // UB: possible division by zero +#ifdef UBFIX + if (scale == 0) + return 0; +#endif //UBFIX return val / scale; } diff --git a/gflib/text.c b/gflib/text.c index 89b47ca219..4cbad13766 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -21,7 +21,7 @@ static u16 gLastTextFgColor; static u16 gLastTextShadowColor; const struct FontInfo *gFonts; -bool8 gUnknown_03002F84; +u8 gUnknown_03002F84; struct Struct_03002F90 gUnknown_03002F90; TextFlags gTextFlags; @@ -154,7 +154,7 @@ u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 printerTemplate.currentY = y; printerTemplate.letterSpacing = gFonts[fontId].letterSpacing; printerTemplate.lineSpacing = gFonts[fontId].lineSpacing; - printerTemplate.style = gFonts[fontId].style; + printerTemplate.unk = gFonts[fontId].unk; printerTemplate.fgColor = gFonts[fontId].fgColor; printerTemplate.bgColor = gFonts[fontId].bgColor; printerTemplate.shadowColor = gFonts[fontId].shadowColor; @@ -205,7 +205,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2); gTextPrinters[printerTemplate->windowId].active = 0; } - gUnknown_03002F84 = FALSE; + gUnknown_03002F84 = 0; return TRUE; } @@ -213,7 +213,7 @@ void RunTextPrinters(void) { int i; - if (!gUnknown_03002F84) + if (gUnknown_03002F84 == 0) { for (i = 0; i < NUM_TEXT_PRINTERS; ++i) { @@ -451,51 +451,46 @@ u8 GetLastTextColor(u8 colorType) { switch (colorType) { - case COLOR_FOREGROUND: + case 0: return gLastTextFgColor; - case COLOR_BACKGROUND: + case 2: return gLastTextBgColor; - case COLOR_SHADOW: + case 1: return gLastTextShadowColor; default: return 0; } } -#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ - { \ - u32 i, j, *ptr, toY, fromX, toX, r5, bits; \ - u8 *dst; \ - j = fromX_; \ - i = fromY_; \ - ptr = unk; \ - toX = toX_; \ - toY = toY_; \ - fromX = fromX_; \ - \ - for (; i < toY; i++) \ - { \ - asm("":::"sl"); /* NONMATCHING */ \ - r5 = *(ptr++); \ - for (j = fromX; j < toX; j++) \ - { \ - const u32 toOrr = r5 & 0xF; \ - if (toOrr) \ - { \ - dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4); \ - bits = ((j & 1) * 4); \ - *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); \ - } \ - r5 >>= 4; \ - } \ - } \ +inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u32 *ptr, s32 width, s32 height) +{ + u32 xAdd, yAdd, r5, bits, toOrr, dummyX; + u8 *dst; + + xAdd = j + width; + yAdd = i + height; + dummyX = j; + for (; i < yAdd; i++) + { + r5 = *ptr++; + for (j = dummyX; j < xAdd; j++) + { + if ((toOrr = r5 & 0xF)) + { + dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4); + bits = ((j & 1) * 4); + *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); + } + r5 >>= 4; + } } +} void CopyGlyphToWindow(struct TextPrinter *textPrinter) { struct Window *win; struct WindowTemplate *winTempl; - struct Struct_03002F90 *unkStruct; + u32 *unkStruct; u32 currX, currY, widthOffset; s32 r4, r0; u8 *windowTiles; @@ -503,17 +498,15 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) win = &gWindows[textPrinter->printerTemplate.windowId]; winTempl = &win->window; - r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX; - if (r4 > gUnknown_03002F90.width) + if ((r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX) > gUnknown_03002F90.width) r4 = gUnknown_03002F90.width; - r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY; - if (r0 > gUnknown_03002F90.height) + if ((r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY) > gUnknown_03002F90.height) r0 = gUnknown_03002F90.height; currX = textPrinter->printerTemplate.currentX; currY = textPrinter->printerTemplate.currentY; - unkStruct = &gUnknown_03002F90; + unkStruct = (u32 *)&gUnknown_03002F90.unk0; windowTiles = win->tileData; widthOffset = winTempl->width * 32; @@ -521,45 +514,31 @@ void CopyGlyphToWindow(struct TextPrinter *textPrinter) { if (r0 < 9) { - GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, r4, r0); } else { - u32 temp; - GLYPH_COPY(currY, currY + 8, currX, currX + r4, unkStruct->unk0); - - temp = currY + 8; - GLYPH_COPY(temp, (temp - 8) + r0, currX, currX + r4, unkStruct->unk40); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, r4, 8); + GLYPH_COPY(windowTiles, widthOffset, currX, currY + 8, unkStruct + 16, r4, r0 - 8); } } else { - u32 temp; if (r0 < 9) { - GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0); - - temp = currX + 8; - GLYPH_COPY(currY, currY + r0, temp, (temp - 8) + r4, unkStruct->unk20); + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, 8, r0); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY, unkStruct + 8, r4 - 8, r0); } else { - GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0); - - temp = currX + 8; - GLYPH_COPY(currY, currY + 8, temp, temp - 8 + r4, unkStruct->unk20); - - temp = currY + 8; - GLYPH_COPY(temp, temp - 8 + r0, currX, currX + 8, unkStruct->unk40); - { - u32 tempX, tempY; - tempX = currX + 8; - tempY = currY + 8; - GLYPH_COPY(tempY, tempY - 8 + r0, tempX, tempX - 8 + r4, unkStruct->unk60); - } + GLYPH_COPY(windowTiles, widthOffset, currX, currY, unkStruct, 8, 8); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY, unkStruct + 8, r4 - 8, 8); + GLYPH_COPY(windowTiles, widthOffset, currX, currY + 8, unkStruct + 16, 8, r0 - 8); + GLYPH_COPY(windowTiles, widthOffset, currX + 8, currY + 8, unkStruct + 24, r4 - 8, r0 - 8); } } } + void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) { struct Window *window; @@ -591,7 +570,7 @@ u16 Font0Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 0; subStruct->hasGlyphIdBeenSet = TRUE; @@ -603,7 +582,7 @@ u16 Font1Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 1; subStruct->hasGlyphIdBeenSet = TRUE; @@ -615,7 +594,7 @@ u16 Font2Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 2; subStruct->hasGlyphIdBeenSet = TRUE; @@ -627,7 +606,7 @@ u16 Font3Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 3; subStruct->hasGlyphIdBeenSet = TRUE; @@ -639,7 +618,7 @@ u16 Font4Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 4; subStruct->hasGlyphIdBeenSet = TRUE; @@ -651,7 +630,7 @@ u16 Font5Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 5; subStruct->hasGlyphIdBeenSet = TRUE; @@ -663,7 +642,7 @@ u16 Font7Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 7; subStruct->hasGlyphIdBeenSet = TRUE; @@ -675,7 +654,7 @@ u16 Font8Func(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (!subStruct->hasGlyphIdBeenSet) + if (subStruct->hasGlyphIdBeenSet == FALSE) { subStruct->glyphId = 8; subStruct->hasGlyphIdBeenSet = TRUE; @@ -687,7 +666,7 @@ void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (gTextFlags.autoScroll == TRUE) + if (gTextFlags.autoScroll == 1) { subStruct->autoScrollDelay = 0; } @@ -703,7 +682,7 @@ void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter) struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); const u8 *arrowTiles; - if (!gTextFlags.autoScroll) + if (gTextFlags.autoScroll == 0) { if (subStruct->downArrowDelay != 0) { @@ -779,7 +758,7 @@ bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) { bool8 result = FALSE; - if (gTextFlags.autoScroll) + if (gTextFlags.autoScroll != 0) { result = TextPrinterWaitAutoMode(textPrinter); } @@ -798,14 +777,17 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) bool16 TextPrinterWait(struct TextPrinter *textPrinter) { bool16 result = FALSE; - if (gTextFlags.autoScroll) + if (gTextFlags.autoScroll != 0) { result = TextPrinterWaitAutoMode(textPrinter); } - else if (JOY_NEW(A_BUTTON | B_BUTTON)) + else { - result = TRUE; - PlaySE(SE_SELECT); + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + result = TRUE; + PlaySE(SE_SELECT); + } } return result; } @@ -821,7 +803,7 @@ void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *c else { FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 0x8, 0x10); - if (!drawArrow) + if (drawArrow == 0) { switch (gTextFlags.useAlternateDownArrow) { @@ -1013,10 +995,10 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; return 2; case EXT_CTRL_CODE_JPN: - textPrinter->japanese = TRUE; + textPrinter->japanese = 1; return 2; case EXT_CTRL_CODE_ENG: - textPrinter->japanese = FALSE; + textPrinter->japanese = 0; return 2; } break; @@ -1077,10 +1059,13 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentX += width; } } - else if (textPrinter->japanese) - textPrinter->printerTemplate.currentX += (gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing); else - textPrinter->printerTemplate.currentX += gUnknown_03002F90.width; + { + if (textPrinter->japanese) + textPrinter->printerTemplate.currentX += (gUnknown_03002F90.width + textPrinter->printerTemplate.letterSpacing); + else + textPrinter->printerTemplate.currentX += gUnknown_03002F90.width; + } return 0; case 1: if (TextPrinterWait(textPrinter)) @@ -1566,7 +1551,7 @@ void SetDefaultFontsPointer(void) u8 GetFontAttribute(u8 fontId, u8 attributeId) { - u8 result = 0; + int result = 0; switch (attributeId) { case FONTATTR_MAX_LETTER_WIDTH: @@ -1581,8 +1566,8 @@ u8 GetFontAttribute(u8 fontId, u8 attributeId) case FONTATTR_LINE_SPACING: result = gFontInfos[fontId].lineSpacing; break; - case FONTATTR_STYLE: - result = gFontInfos[fontId].style; + case FONTATTR_UNKNOWN: + result = gFontInfos[fontId].unk; break; case FONTATTR_COLOR_FOREGROUND: result = gFontInfos[fontId].fgColor; @@ -1612,7 +1597,7 @@ void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 gUnknown_03002F90.width = 8; // gGlyphWidth - gUnknown_03002F90.height = 12; // gGlyphHeight + gUnknown_03002F90.height = 12; // gGlyphHeight } else { @@ -1655,7 +1640,7 @@ void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 gUnknown_03002F90.width = 8; // gGlyphWidth - gUnknown_03002F90.height = 15; // gGlyphHeight + gUnknown_03002F90.height = 15; // gGlyphHeight } else { @@ -1697,7 +1682,7 @@ void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 gUnknown_03002F90.width = 8; // gGlyphWidth - gUnknown_03002F90.height = 12; // gGlyphHeight + gUnknown_03002F90.height = 12; // gGlyphHeight } else { @@ -1737,10 +1722,10 @@ void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) { glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); - DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); - DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); - gUnknown_03002F90.width = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth + DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); // gUnknown_03002F90 + 0x40 + DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x20 + DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); // gUnknown_03002F90 + 0x60 + gUnknown_03002F90.width = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth gUnknown_03002F90.height = 14; // gGlyphHeight } else @@ -1784,7 +1769,7 @@ void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 gUnknown_03002F90.width = 8; // gGlyphWidth - gUnknown_03002F90.height = 15; // gGlyphHeight + gUnknown_03002F90.height = 15; // gGlyphHeight } else { diff --git a/gflib/text.h b/gflib/text.h index 4cf5bc20b9..723a2fc0e5 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -269,20 +269,13 @@ #define TEXT_SPEED_FF 0xFF -enum -{ - COLOR_FOREGROUND, - COLOR_SHADOW, - COLOR_BACKGROUND -}; - enum { FONTATTR_MAX_LETTER_WIDTH, FONTATTR_MAX_LETTER_HEIGHT, FONTATTR_LETTER_SPACING, FONTATTR_LINE_SPACING, - FONTATTR_STYLE, + FONTATTR_UNKNOWN, // dunno what this is yet FONTATTR_COLOR_FOREGROUND, FONTATTR_COLOR_BACKGROUND, FONTATTR_COLOR_SHADOW @@ -310,7 +303,7 @@ struct TextPrinterTemplate u8 currentY; u8 letterSpacing; u8 lineSpacing; - u8 style:4; // 0xC + u8 unk:4; // 0xC u8 fgColor:4; u8 bgColor:4; u8 shadowColor:4; @@ -329,7 +322,7 @@ struct TextPrinter u8 delayCounter; u8 scrollDistance; u8 minLetterSpacing; // 0x20 - bool8 japanese; + u8 japanese; }; struct FontInfo @@ -339,7 +332,7 @@ struct FontInfo u8 maxLetterHeight; u8 letterSpacing; u8 lineSpacing; - u8 style:4; //unused + u8 unk:4; u8 fgColor:4; u8 bgColor:4; u8 shadowColor:4; @@ -379,7 +372,7 @@ struct Struct_03002F90 extern TextFlags gTextFlags; -extern bool8 gUnknown_03002F84; +extern u8 gUnknown_03002F84; extern struct Struct_03002F90 gUnknown_03002F90; void SetFontsPointer(const struct FontInfo *fonts); diff --git a/gflib/window.c b/gflib/window.c index 0be59773c1..7c87ea86dc 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -30,18 +30,21 @@ static void nullsub_8(void) bool16 InitWindows(const struct WindowTemplate *templates) { - int i, j; - u8* allocatedTilemapBuffer; - u16 attrib; - int allocatedBaseBlock; + int i; + void *bgTilemapBuffer; + int j; u8 bgLayer; + u16 attrib; + u8* allocatedTilemapBuffer; + int allocatedBaseBlock; for (i = 0; i < 0x4; ++i) { - if (GetBgTilemapBuffer(i) != NULL) + bgTilemapBuffer = GetBgTilemapBuffer(i); + if (bgTilemapBuffer != NULL) gUnknown_03002F70[i] = nullsub_8; else - gUnknown_03002F70[i] = NULL; + gUnknown_03002F70[i] = bgTilemapBuffer; } for (i = 0; i < 0x20; ++i) @@ -564,19 +567,19 @@ u32 GetWindowAttribute(u8 windowId, u8 attributeId) switch (attributeId) { case WINDOW_BG: - return (u32)gWindows[windowId].window.bg; + return gWindows[windowId].window.bg; case WINDOW_TILEMAP_LEFT: - return (u32)gWindows[windowId].window.tilemapLeft; + return gWindows[windowId].window.tilemapLeft; case WINDOW_TILEMAP_TOP: - return (u32)gWindows[windowId].window.tilemapTop; + return gWindows[windowId].window.tilemapTop; case WINDOW_WIDTH: - return (u32)gWindows[windowId].window.width; + return gWindows[windowId].window.width; case WINDOW_HEIGHT: - return (u32)gWindows[windowId].window.height; + return gWindows[windowId].window.height; case WINDOW_PALETTE_NUM: - return (u32)gWindows[windowId].window.paletteNum; + return gWindows[windowId].window.paletteNum; case WINDOW_BASE_BLOCK: - return (u32)gWindows[windowId].window.baseBlock; + return gWindows[windowId].window.baseBlock; case WINDOW_TILE_DATA: return (u32)(gWindows[windowId].tileData); default: @@ -640,9 +643,12 @@ u16 AddWindow8Bit(const struct WindowTemplate *template) } return 0xFF; } - gWindows[windowId].tileData = memAddress; - gWindows[windowId].window = *template; - return windowId; + else + { + gWindows[windowId].tileData = memAddress; + gWindows[windowId].window = *template; + return windowId; + } } void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue) diff --git a/graphics/battle_anims/sprites/substitute.bin b/graphics/battle_anims/sprites/substitute.bin deleted file mode 100644 index d30c07d4ef..0000000000 Binary files a/graphics/battle_anims/sprites/substitute.bin and /dev/null differ diff --git a/graphics/battle_anims/sprites/substitute_back.png b/graphics/battle_anims/sprites/substitute_back.png new file mode 100644 index 0000000000..8ea1f7ff8b Binary files /dev/null and b/graphics/battle_anims/sprites/substitute_back.png differ diff --git a/graphics/battle_frontier/factory_screen/action_box_left.png b/graphics/battle_frontier/factory_screen/action_box_left.png new file mode 100644 index 0000000000..c4c943a15a Binary files /dev/null and b/graphics/battle_frontier/factory_screen/action_box_left.png differ diff --git a/graphics/battle_frontier/factory_screen/action_box_right.png b/graphics/battle_frontier/factory_screen/action_box_right.png new file mode 100644 index 0000000000..984244660f Binary files /dev/null and b/graphics/battle_frontier/factory_screen/action_box_right.png differ diff --git a/graphics/battle_frontier/factory_screen/action_highlight_left.png b/graphics/battle_frontier/factory_screen/action_highlight_left.png new file mode 100644 index 0000000000..873049e640 Binary files /dev/null and b/graphics/battle_frontier/factory_screen/action_highlight_left.png differ diff --git a/graphics/battle_frontier/factory_screen/action_highlight_middle.png b/graphics/battle_frontier/factory_screen/action_highlight_middle.png new file mode 100644 index 0000000000..e2bebe11b0 Binary files /dev/null and b/graphics/battle_frontier/factory_screen/action_highlight_middle.png differ diff --git a/graphics/battle_frontier/factory_screen/action_highlight_right.png b/graphics/battle_frontier/factory_screen/action_highlight_right.png new file mode 100644 index 0000000000..e2bebe11b0 Binary files /dev/null and b/graphics/battle_frontier/factory_screen/action_highlight_right.png differ diff --git a/graphics/battle_frontier/factory_screen/arrow.png b/graphics/battle_frontier/factory_screen/arrow.png new file mode 100644 index 0000000000..d0ec83deeb Binary files /dev/null and b/graphics/battle_frontier/factory_screen/arrow.png differ diff --git a/graphics/unknown/unknown_60F17C.pal b/graphics/battle_frontier/factory_screen/interface.pal similarity index 100% rename from graphics/unknown/unknown_60F17C.pal rename to graphics/battle_frontier/factory_screen/interface.pal diff --git a/graphics/battle_frontier/factory_screen/menu_highlight_left.png b/graphics/battle_frontier/factory_screen/menu_highlight_left.png new file mode 100644 index 0000000000..1c39f72501 Binary files /dev/null and b/graphics/battle_frontier/factory_screen/menu_highlight_left.png differ diff --git a/graphics/battle_frontier/factory_screen/menu_highlight_right.png b/graphics/battle_frontier/factory_screen/menu_highlight_right.png new file mode 100644 index 0000000000..9e68007331 Binary files /dev/null and b/graphics/battle_frontier/factory_screen/menu_highlight_right.png differ diff --git a/graphics/unknown/unknown_61023C.bin b/graphics/battle_frontier/factory_screen/mon_pic_bg.bin similarity index 100% rename from graphics/unknown/unknown_61023C.bin rename to graphics/battle_frontier/factory_screen/mon_pic_bg.bin diff --git a/graphics/battle_frontier/factory_screen/mon_pic_bg.png b/graphics/battle_frontier/factory_screen/mon_pic_bg.png new file mode 100644 index 0000000000..b72da6f44b Binary files /dev/null and b/graphics/battle_frontier/factory_screen/mon_pic_bg.png differ diff --git a/graphics/battle_frontier/factory_screen/mon_pic_bg_anim.png b/graphics/battle_frontier/factory_screen/mon_pic_bg_anim.png new file mode 100644 index 0000000000..324063d0de Binary files /dev/null and b/graphics/battle_frontier/factory_screen/mon_pic_bg_anim.png differ diff --git a/graphics/battle_frontier/factory_screen/pokeball.png b/graphics/battle_frontier/factory_screen/pokeball.png new file mode 100644 index 0000000000..b3426fc727 Binary files /dev/null and b/graphics/battle_frontier/factory_screen/pokeball.png differ diff --git a/graphics/unknown/unknown_60F13C.pal b/graphics/battle_frontier/factory_screen/pokeball_gray.pal similarity index 100% rename from graphics/unknown/unknown_60F13C.pal rename to graphics/battle_frontier/factory_screen/pokeball_gray.pal diff --git a/graphics/unknown/unknown_60F15C.pal b/graphics/battle_frontier/factory_screen/pokeball_selected.pal similarity index 100% rename from graphics/unknown/unknown_60F15C.pal rename to graphics/battle_frontier/factory_screen/pokeball_selected.pal diff --git a/graphics/unknown/unknown_61046C.pal b/graphics/battle_frontier/factory_screen/text.pal similarity index 100% rename from graphics/unknown/unknown_61046C.pal rename to graphics/battle_frontier/factory_screen/text.pal diff --git a/graphics/object_events/palettes/30.pal b/graphics/object_events/palettes/birth_island_stone.pal similarity index 100% rename from graphics/object_events/palettes/30.pal rename to graphics/object_events/palettes/birth_island_stone.pal diff --git a/graphics/object_events/palettes/08.pal b/graphics/object_events/palettes/brendan.pal similarity index 100% rename from graphics/object_events/palettes/08.pal rename to graphics/object_events/palettes/brendan.pal diff --git a/graphics/object_events/palettes/09.pal b/graphics/object_events/palettes/brendan_reflection.pal similarity index 100% rename from graphics/object_events/palettes/09.pal rename to graphics/object_events/palettes/brendan_reflection.pal diff --git a/graphics/object_events/palettes/10.pal b/graphics/object_events/palettes/bridge_reflection.pal similarity index 100% rename from graphics/object_events/palettes/10.pal rename to graphics/object_events/palettes/bridge_reflection.pal diff --git a/graphics/object_events/palettes/20.pal b/graphics/object_events/palettes/cable_car.pal similarity index 100% rename from graphics/object_events/palettes/20.pal rename to graphics/object_events/palettes/cable_car.pal diff --git a/graphics/object_events/palettes/29.pal b/graphics/object_events/palettes/deoxys.pal similarity index 100% rename from graphics/object_events/palettes/29.pal rename to graphics/object_events/palettes/deoxys.pal diff --git a/graphics/object_events/palettes/16.pal b/graphics/object_events/palettes/enemy_zigzagoon.pal similarity index 100% rename from graphics/object_events/palettes/16.pal rename to graphics/object_events/palettes/enemy_zigzagoon.pal diff --git a/graphics/object_events/palettes/24.pal b/graphics/object_events/palettes/groudon.pal similarity index 100% rename from graphics/object_events/palettes/24.pal rename to graphics/object_events/palettes/groudon.pal diff --git a/graphics/object_events/palettes/25.pal b/graphics/object_events/palettes/groudon_reflection.pal similarity index 100% rename from graphics/object_events/palettes/25.pal rename to graphics/object_events/palettes/groudon_reflection.pal diff --git a/graphics/object_events/palettes/31.pal b/graphics/object_events/palettes/ho_oh.pal similarity index 100% rename from graphics/object_events/palettes/31.pal rename to graphics/object_events/palettes/ho_oh.pal diff --git a/graphics/object_events/palettes/22.pal b/graphics/object_events/palettes/kyogre.pal similarity index 100% rename from graphics/object_events/palettes/22.pal rename to graphics/object_events/palettes/kyogre.pal diff --git a/graphics/object_events/palettes/23.pal b/graphics/object_events/palettes/kyogre_reflection.pal similarity index 100% rename from graphics/object_events/palettes/23.pal rename to graphics/object_events/palettes/kyogre_reflection.pal diff --git a/graphics/object_events/palettes/32.pal b/graphics/object_events/palettes/lugia.pal similarity index 100% rename from graphics/object_events/palettes/32.pal rename to graphics/object_events/palettes/lugia.pal diff --git a/graphics/object_events/palettes/17.pal b/graphics/object_events/palettes/may.pal similarity index 100% rename from graphics/object_events/palettes/17.pal rename to graphics/object_events/palettes/may.pal diff --git a/graphics/object_events/palettes/18.pal b/graphics/object_events/palettes/may_reflection.pal similarity index 100% rename from graphics/object_events/palettes/18.pal rename to graphics/object_events/palettes/may_reflection.pal diff --git a/graphics/object_events/palettes/19.pal b/graphics/object_events/palettes/moving_box.pal similarity index 100% rename from graphics/object_events/palettes/19.pal rename to graphics/object_events/palettes/moving_box.pal diff --git a/graphics/object_events/palettes/00.pal b/graphics/object_events/palettes/npc_1.pal similarity index 100% rename from graphics/object_events/palettes/00.pal rename to graphics/object_events/palettes/npc_1.pal diff --git a/graphics/object_events/palettes/04.pal b/graphics/object_events/palettes/npc_1_reflection.pal similarity index 100% rename from graphics/object_events/palettes/04.pal rename to graphics/object_events/palettes/npc_1_reflection.pal diff --git a/graphics/object_events/palettes/01.pal b/graphics/object_events/palettes/npc_2.pal similarity index 100% rename from graphics/object_events/palettes/01.pal rename to graphics/object_events/palettes/npc_2.pal diff --git a/graphics/object_events/palettes/05.pal b/graphics/object_events/palettes/npc_2_reflection.pal similarity index 100% rename from graphics/object_events/palettes/05.pal rename to graphics/object_events/palettes/npc_2_reflection.pal diff --git a/graphics/object_events/palettes/02.pal b/graphics/object_events/palettes/npc_3.pal similarity index 100% rename from graphics/object_events/palettes/02.pal rename to graphics/object_events/palettes/npc_3.pal diff --git a/graphics/object_events/palettes/06.pal b/graphics/object_events/palettes/npc_3_reflection.pal similarity index 100% rename from graphics/object_events/palettes/06.pal rename to graphics/object_events/palettes/npc_3_reflection.pal diff --git a/graphics/object_events/palettes/03.pal b/graphics/object_events/palettes/npc_4.pal similarity index 100% rename from graphics/object_events/palettes/03.pal rename to graphics/object_events/palettes/npc_4.pal diff --git a/graphics/object_events/palettes/07.pal b/graphics/object_events/palettes/npc_4_reflection.pal similarity index 100% rename from graphics/object_events/palettes/07.pal rename to graphics/object_events/palettes/npc_4_reflection.pal diff --git a/graphics/object_events/palettes/11.pal b/graphics/object_events/palettes/player_underwater.pal similarity index 100% rename from graphics/object_events/palettes/11.pal rename to graphics/object_events/palettes/player_underwater.pal diff --git a/graphics/object_events/palettes/27.pal b/graphics/object_events/palettes/poochyena.pal similarity index 100% rename from graphics/object_events/palettes/27.pal rename to graphics/object_events/palettes/poochyena.pal diff --git a/graphics/object_events/palettes/12.pal b/graphics/object_events/palettes/quinty_plump.pal similarity index 100% rename from graphics/object_events/palettes/12.pal rename to graphics/object_events/palettes/quinty_plump.pal diff --git a/graphics/object_events/palettes/13.pal b/graphics/object_events/palettes/quinty_plump_reflection.pal similarity index 100% rename from graphics/object_events/palettes/13.pal rename to graphics/object_events/palettes/quinty_plump_reflection.pal diff --git a/graphics/object_events/palettes/28.pal b/graphics/object_events/palettes/red_leaf.pal similarity index 100% rename from graphics/object_events/palettes/28.pal rename to graphics/object_events/palettes/red_leaf.pal diff --git a/graphics/object_events/palettes/33.pal b/graphics/object_events/palettes/ruby_sapphire_brendan.pal similarity index 100% rename from graphics/object_events/palettes/33.pal rename to graphics/object_events/palettes/ruby_sapphire_brendan.pal diff --git a/graphics/object_events/palettes/34.pal b/graphics/object_events/palettes/ruby_sapphire_may.pal similarity index 100% rename from graphics/object_events/palettes/34.pal rename to graphics/object_events/palettes/ruby_sapphire_may.pal diff --git a/graphics/object_events/palettes/21.pal b/graphics/object_events/palettes/ss_tidal.pal similarity index 100% rename from graphics/object_events/palettes/21.pal rename to graphics/object_events/palettes/ss_tidal.pal diff --git a/graphics/object_events/palettes/26.pal b/graphics/object_events/palettes/submarine_shadow.pal similarity index 100% rename from graphics/object_events/palettes/26.pal rename to graphics/object_events/palettes/submarine_shadow.pal diff --git a/graphics/object_events/palettes/14.pal b/graphics/object_events/palettes/truck.pal similarity index 100% rename from graphics/object_events/palettes/14.pal rename to graphics/object_events/palettes/truck.pal diff --git a/graphics/object_events/palettes/15.pal b/graphics/object_events/palettes/vigoroth.pal similarity index 100% rename from graphics/object_events/palettes/15.pal rename to graphics/object_events/palettes/vigoroth.pal diff --git a/graphics/picture_frame/frame5_map.bin.rl.bak b/graphics/picture_frame/frame5_map.bin.rl.bak deleted file mode 100644 index c009f0a95f..0000000000 Binary files a/graphics/picture_frame/frame5_map.bin.rl.bak and /dev/null differ diff --git a/graphics/pokenav/bg.bin b/graphics/pokenav/bg_dots.bin similarity index 100% rename from graphics/pokenav/bg.bin rename to graphics/pokenav/bg_dots.bin diff --git a/graphics/pokenav/bg.png b/graphics/pokenav/bg_dots.png similarity index 100% rename from graphics/pokenav/bg.png rename to graphics/pokenav/bg_dots.png diff --git a/graphics/pokenav/outline.png b/graphics/pokenav/device_outline.png similarity index 100% rename from graphics/pokenav/outline.png rename to graphics/pokenav/device_outline.png diff --git a/graphics/pokenav/outline_map.bin b/graphics/pokenav/device_outline_map.bin similarity index 100% rename from graphics/pokenav/outline_map.bin rename to graphics/pokenav/device_outline_map.bin diff --git a/graphics/trainers/front_pics/cool_trainer_f_front_pic.png b/graphics/trainers/front_pics/cooltrainer_f_front_pic.png similarity index 100% rename from graphics/trainers/front_pics/cool_trainer_f_front_pic.png rename to graphics/trainers/front_pics/cooltrainer_f_front_pic.png diff --git a/graphics/trainers/front_pics/cool_trainer_m_front_pic.png b/graphics/trainers/front_pics/cooltrainer_m_front_pic.png similarity index 100% rename from graphics/trainers/front_pics/cool_trainer_m_front_pic.png rename to graphics/trainers/front_pics/cooltrainer_m_front_pic.png diff --git a/graphics/trainers/palettes/cool_trainer_f.pal b/graphics/trainers/palettes/cooltrainer_f.pal similarity index 100% rename from graphics/trainers/palettes/cool_trainer_f.pal rename to graphics/trainers/palettes/cooltrainer_f.pal diff --git a/graphics/trainers/palettes/cool_trainer_m.pal b/graphics/trainers/palettes/cooltrainer_m.pal similarity index 100% rename from graphics/trainers/palettes/cool_trainer_m.pal rename to graphics/trainers/palettes/cooltrainer_m.pal diff --git a/graphics/unknown/unknown_60F1BC.png b/graphics/unknown/unknown_60F1BC.png deleted file mode 100644 index 185b93d57c..0000000000 Binary files a/graphics/unknown/unknown_60F1BC.png and /dev/null differ diff --git a/graphics/unknown/unknown_60F3BC.png b/graphics/unknown/unknown_60F3BC.png deleted file mode 100644 index 3114f2eb89..0000000000 Binary files a/graphics/unknown/unknown_60F3BC.png and /dev/null differ diff --git a/graphics/unknown/unknown_60F43C.png b/graphics/unknown/unknown_60F43C.png deleted file mode 100644 index 3c2c1d5cde..0000000000 Binary files a/graphics/unknown/unknown_60F43C.png and /dev/null differ diff --git a/graphics/unknown/unknown_60F53C.png b/graphics/unknown/unknown_60F53C.png deleted file mode 100644 index 65450c7b33..0000000000 Binary files a/graphics/unknown/unknown_60F53C.png and /dev/null differ diff --git a/graphics/unknown/unknown_60F63C.png b/graphics/unknown/unknown_60F63C.png deleted file mode 100644 index 01fcea2fa7..0000000000 Binary files a/graphics/unknown/unknown_60F63C.png and /dev/null differ diff --git a/graphics/unknown/unknown_60F6BC.png b/graphics/unknown/unknown_60F6BC.png deleted file mode 100644 index bda46587fc..0000000000 Binary files a/graphics/unknown/unknown_60F6BC.png and /dev/null differ diff --git a/graphics/unknown/unknown_60F7BC.png b/graphics/unknown/unknown_60F7BC.png deleted file mode 100644 index 487b428bdb..0000000000 Binary files a/graphics/unknown/unknown_60F7BC.png and /dev/null differ diff --git a/graphics/unknown/unknown_60F83C.png b/graphics/unknown/unknown_60F83C.png deleted file mode 100644 index 2a44e94557..0000000000 Binary files a/graphics/unknown/unknown_60F83C.png and /dev/null differ diff --git a/graphics/unknown/unknown_60F93C.png b/graphics/unknown/unknown_60F93C.png deleted file mode 100644 index 2a44e94557..0000000000 Binary files a/graphics/unknown/unknown_60F93C.png and /dev/null differ diff --git a/graphics/unknown/unknown_60FA3C.png b/graphics/unknown/unknown_60FA3C.png deleted file mode 100644 index c4ae096d0a..0000000000 Binary files a/graphics/unknown/unknown_60FA3C.png and /dev/null differ diff --git a/graphics/unknown/unknown_61033C.png b/graphics/unknown/unknown_61033C.png deleted file mode 100644 index ec874f98c3..0000000000 Binary files a/graphics/unknown/unknown_61033C.png and /dev/null differ diff --git a/graphics/unknown/unknown_61039C.pal b/graphics/unknown/unknown_61039C.pal deleted file mode 100644 index 89f527ce4d..0000000000 --- a/graphics/unknown/unknown_61039C.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -0 0 0 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 -213 255 238 diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 630aaa3fc1..f9ea405321 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -709,7 +709,7 @@ $(PKNAVOPTIONSGFXDIR)/options.4bpp: $(PKNAVOPTIONSGFXDIR)/hoenn_map.4bpp \ $(PKNAVGFXDIR)/header.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 53 -$(PKNAVGFXDIR)/outline.4bpp: %.4bpp: %.png +$(PKNAVGFXDIR)/device_outline.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 53 $(PKNAVGFXDIR)/ui_matchcall.4bpp: %.4bpp: %.png diff --git a/include/AgbRfu_LinkManager.h b/include/AgbRfu_LinkManager.h index 4e1a879c22..d4ef13183e 100644 --- a/include/AgbRfu_LinkManager.h +++ b/include/AgbRfu_LinkManager.h @@ -176,8 +176,8 @@ typedef struct linkManagerTag /* 0x024 */ VBL_TIMER nameAcceptTimer; /* 0x030 */ VBL_TIMER linkRecoveryTimer; /* 0x03c */ INIT_PARAM *init_param; - /* 0x040 */ void (*LMAN_callback)(u8 msg, u8 paramCount); - /* 0x044 */ void (*MSC_callback)(u16 REQ_commandID); + /* 0x040 */ void (*LMAN_callback)(u8, u8); + /* 0x044 */ void (*MSC_callback)(u16); } LINK_MANAGER; extern struct linkManagerTag lman; diff --git a/include/battle.h b/include/battle.h index 5a04c1eec6..53a78024a7 100644 --- a/include/battle.h +++ b/include/battle.h @@ -11,6 +11,7 @@ #include "battle_gfx_sfx_util.h" #include "battle_util2.h" #include "battle_bg.h" +#include "pokeball.h" #define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler]) #define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE) @@ -124,8 +125,8 @@ struct ProtectStruct u32 flinchImmobility:1; u32 notFirstStrike:1; u32 palaceUnableToUseMove:1; - s32 physicalDmg; - s32 specialDmg; + u32 physicalDmg; + u32 specialDmg; u8 physicalBattlerId; u8 specialBattlerId; }; @@ -254,8 +255,8 @@ struct BattleResults u16 playerMon2Species; // 0x26 u16 caughtMonSpecies; // 0x28 u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A - u8 filler35; // 0x35 - u8 catchAttempts[11]; // 0x36 + u8 filler35; // 0x35 + u8 catchAttempts[POKEBALL_COUNT - 1]; // 0x36 Doesn't include Master ball }; struct BattleTv_Side @@ -493,7 +494,7 @@ struct BattleScripting u8 field_20; u8 reshowMainState; u8 reshowHelperState; - u8 field_23; + u8 levelUpHP; u8 windowsType; // 0 - normal, 1 - battle arena u8 multiplayerId; u8 specialTrainerBattleType; @@ -584,7 +585,11 @@ struct BattleSpriteData struct MonSpritesGfx { void* firstDecompressed; // ptr to the decompressed sprite of the first pokemon - void* sprites[4]; + union + { + void* ptr[4]; + u8* byte[4]; + } sprites; struct SpriteTemplate templates[4]; struct SpriteFrameImage field_74[4][4]; u8 field_F4[0x80]; diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 32918fefba..5b1ada11a4 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -85,8 +85,8 @@ enum struct UnusedControllerStruct { - u8 field_0:7; - u8 flag_x80:1; + u8 unk:7; + u8 flag:1; }; struct HpAndStatus @@ -145,19 +145,19 @@ enum CONTROLLER_STATUSXOR, CONTROLLER_DATATRANSFER, CONTROLLER_DMA3TRANSFER, - CONTROLLER_31, + CONTROLLER_PLAYBGM, CONTROLLER_32, CONTROLLER_TWORETURNVALUES, CONTROLLER_CHOSENMONRETURNVALUE, CONTROLLER_ONERETURNVALUE, CONTROLLER_ONERETURNVALUE_DUPLICATE, - CONTROLLER_37, - CONTROLLER_38, - CONTROLLER_39, - CONTROLLER_40, + CONTROLLER_CLEARUNKVAR, + CONTROLLER_SETUNKVAR, + CONTROLLER_CLEARUNKFLAG, + CONTROLLER_TOGGLEUNKFLAG, CONTROLLER_HITANIMATION, CONTROLLER_42, - CONTROLLER_EFFECTIVENESSSOUND, + CONTROLLER_PLAYSE, CONTROLLER_PLAYFANFAREORBGM, CONTROLLER_FAINTINGCRY, CONTROLLER_INTROSLIDE, @@ -175,7 +175,7 @@ enum CONTROLLER_CMDS_COUNT }; -extern struct UnusedControllerStruct gUnknown_02022D0C; +extern struct UnusedControllerStruct gUnusedControllerStruct; // general functions void HandleLinkBattleSetup(void); @@ -222,10 +222,10 @@ void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2); void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c); void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1); void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b); -void BtlController_EmitCmd37(u8 bufferId); // unused -void BtlController_EmitCmd38(u8 bufferId, u8 b); // unused -void BtlController_EmitCmd39(u8 bufferId); // unused -void BtlController_EmitCmd40(u8 bufferId); // unused +void BtlController_EmitClearUnkVar(u8 bufferId); // unused +void BtlController_EmitSetUnkVar(u8 bufferId, u8 b); // unused +void BtlController_EmitClearUnkFlag(u8 bufferId); // unused +void BtlController_EmitToggleUnkFlag(u8 bufferId); // unused void BtlController_EmitHitAnimation(u8 bufferId); void BtlController_EmitCmd42(u8 bufferId); void BtlController_EmitPlaySE(u8 bufferId, u16 songId); diff --git a/include/battle_message.h b/include/battle_message.h index af090a06cf..011a1cb0c7 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -145,7 +145,7 @@ { \ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ textVar[1] = B_BUFF_STRING; \ - textVar[2] = (stringId & 0xFF); \ + textVar[2] = stringId; \ textVar[3] = (stringId & 0xFF00) >> 8; \ textVar[4] = B_BUFF_EOS; \ } diff --git a/include/battle_tower.h b/include/battle_tower.h index 3bf2f004b1..a803145927 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -43,7 +43,9 @@ extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; extern const struct FacilityMon gSlateportBattleTentMons[]; extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[]; -extern u16 gUnknown_03006298[]; +// Temporary storage for monIds of the opponent team +// during team generation in battle factory and similar facilities. +extern u16 gFrontierTempParty[]; extern const struct BattleFrontierTrainer *gFacilityTrainers; extern const struct FacilityMon *gFacilityTrainerMons; @@ -81,6 +83,6 @@ u8 GetFrontierEnemyMonLevel(u8 lvlMode); s32 GetHighestLevelInPlayerParty(void); u8 FacilityClassToGraphicsId(u8 facilityClass); bool32 ValidateBattleTowerRecord(u8 recordId); // unused -void sub_8166188(void); +void TrySetLinkBattleTowerEnemyPartyLevel(void); #endif //GUARD_BATTLE_TOWER_H diff --git a/include/config.h b/include/config.h index 4f97a12a3b..4c231a84de 100644 --- a/include/config.h +++ b/include/config.h @@ -15,9 +15,6 @@ // printing system. Use NoCashGBAPrint() and NoCashGBAPrintf() like you // would normally use AGBPrint() and AGBPrintf(). -// NOTE: Don't try to enable assert right now as many pointers -// still exist in defines and WILL likely result in a broken ROM. - #define ENGLISH #ifdef ENGLISH @@ -26,9 +23,12 @@ #define UNITS_METRIC #endif +// Uncomment to fix some identified minor bugs +//#define BUGFIX + // Various undefined behavior bugs may or may not prevent compilation with // newer compilers. So always fix them when using a modern compiler. -#if MODERN +#if MODERN || defined(BUGFIX) #ifndef UBFIX #define UBFIX #endif diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index ebc422b18e..5f8900bf66 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -346,51 +346,51 @@ #define BG_SOLARBEAM_PLAYER 25 #define BG_SOLARBEAM_CONTESTS 26 -// table ids for general animations -#define B_ANIM_CASTFORM_CHANGE 0x0 -#define B_ANIM_STATS_CHANGE 0x1 -#define B_ANIM_SUBSTITUTE_FADE 0x2 -#define B_ANIM_SUBSTITUTE_APPEAR 0x3 -#define B_ANIM_POKEBLOCK_THROW 0x4 -#define B_ANIM_ITEM_KNOCKOFF 0x5 -#define B_ANIM_TURN_TRAP 0x6 -#define B_ANIM_HELD_ITEM_EFFECT 0x7 -#define B_ANIM_SMOKEBALL_ESCAPE 0x8 -#define B_ANIM_FOCUS_BAND 0x9 -#define B_ANIM_RAIN_CONTINUES 0xA -#define B_ANIM_SUN_CONTINUES 0xB -#define B_ANIM_SANDSTORM_CONTINUES 0xC -#define B_ANIM_HAIL_CONTINUES 0xD -#define B_ANIM_LEECH_SEED_DRAIN 0xE -#define B_ANIM_MON_HIT 0xF -#define B_ANIM_ITEM_STEAL 0x10 -#define B_ANIM_SNATCH_MOVE 0x11 -#define B_ANIM_FUTURE_SIGHT_HIT 0x12 -#define B_ANIM_DOOM_DESIRE_HIT 0x13 -#define B_ANIM_FOCUS_PUNCH_SETUP 0x14 -#define B_ANIM_INGRAIN_HEAL 0x15 -#define B_ANIM_WISH_HEAL 0x16 +// table ids for general animations (gBattleAnims_General) +#define B_ANIM_CASTFORM_CHANGE 0 +#define B_ANIM_STATS_CHANGE 1 +#define B_ANIM_SUBSTITUTE_FADE 2 +#define B_ANIM_SUBSTITUTE_APPEAR 3 +#define B_ANIM_POKEBLOCK_THROW 4 +#define B_ANIM_ITEM_KNOCKOFF 5 +#define B_ANIM_TURN_TRAP 6 +#define B_ANIM_HELD_ITEM_EFFECT 7 +#define B_ANIM_SMOKEBALL_ESCAPE 8 +#define B_ANIM_FOCUS_BAND 9 +#define B_ANIM_RAIN_CONTINUES 10 +#define B_ANIM_SUN_CONTINUES 11 +#define B_ANIM_SANDSTORM_CONTINUES 12 +#define B_ANIM_HAIL_CONTINUES 13 +#define B_ANIM_LEECH_SEED_DRAIN 14 +#define B_ANIM_MON_HIT 15 +#define B_ANIM_ITEM_STEAL 16 +#define B_ANIM_SNATCH_MOVE 17 +#define B_ANIM_FUTURE_SIGHT_HIT 18 +#define B_ANIM_DOOM_DESIRE_HIT 19 +#define B_ANIM_FOCUS_PUNCH_SETUP 20 +#define B_ANIM_INGRAIN_HEAL 21 +#define B_ANIM_WISH_HEAL 22 -// special animations table -#define B_ANIM_LVL_UP 0x0 -#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1 -#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2 -#define B_ANIM_BALL_THROW 0x3 -#define B_ANIM_BALL_THROW_WITH_TRAINER 0x4 -#define B_ANIM_SUBSTITUTE_TO_MON 0x5 -#define B_ANIM_MON_TO_SUBSTITUTE 0x6 +// special animations table (gBattleAnims_Special) +#define B_ANIM_LVL_UP 0 +#define B_ANIM_SWITCH_OUT_PLAYER_MON 1 +#define B_ANIM_SWITCH_OUT_OPPONENT_MON 2 +#define B_ANIM_BALL_THROW 3 +#define B_ANIM_BALL_THROW_WITH_TRAINER 4 +#define B_ANIM_SUBSTITUTE_TO_MON 5 +#define B_ANIM_MON_TO_SUBSTITUTE 6 -// status animation table -#define B_ANIM_STATUS_PSN 0x0 -#define B_ANIM_STATUS_CONFUSION 0x1 -#define B_ANIM_STATUS_BRN 0x2 -#define B_ANIM_STATUS_INFATUATION 0x3 -#define B_ANIM_STATUS_SLP 0x4 -#define B_ANIM_STATUS_PRZ 0x5 -#define B_ANIM_STATUS_FRZ 0x6 -#define B_ANIM_STATUS_CURSED 0x7 -#define B_ANIM_STATUS_NIGHTMARE 0x8 -#define B_ANIM_STATUS_WRAPPED 0x9 // does not actually exist +// status animation table (gBattleAnims_StatusConditions) +#define B_ANIM_STATUS_PSN 0 +#define B_ANIM_STATUS_CONFUSION 1 +#define B_ANIM_STATUS_BRN 2 +#define B_ANIM_STATUS_INFATUATION 3 +#define B_ANIM_STATUS_SLP 4 +#define B_ANIM_STATUS_PRZ 5 +#define B_ANIM_STATUS_FRZ 6 +#define B_ANIM_STATUS_CURSED 7 +#define B_ANIM_STATUS_NIGHTMARE 8 +#define B_ANIM_STATUS_WRAPPED 9 // does not actually exist // Tasks with return values often assign them to gBattleAnimArgs[7]. #define ARG_RET_ID 7 diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h index 1a60714e8b..bbe6db81c9 100644 --- a/include/constants/battle_frontier.h +++ b/include/constants/battle_frontier.h @@ -51,7 +51,7 @@ #define MAX_BATTLE_FRONTIER_POINTS 9999 #define MAX_STREAK 9999 -// These sets of facility ids would be redunant if the order was consistent +// These sets of facility ids would be redundant if the order was consistent // The order is important for this set so that all the non-link records can be continuous #define RANKING_HALL_BATTLE_TOWER_SINGLES 0 #define RANKING_HALL_BATTLE_TOWER_DOUBLES 1 diff --git a/include/constants/battle_pyramid.h b/include/constants/battle_pyramid.h index 378197a4df..004df71552 100644 --- a/include/constants/battle_pyramid.h +++ b/include/constants/battle_pyramid.h @@ -7,6 +7,16 @@ #define FLOOR_WALKABLE_METATILE 0x28D #define FLOOR_EXIT_METATILE 0x28E +#define HINT_EXIT_DIRECTION 0 +#define HINT_REMAINING_ITEMS 1 +#define HINT_REMAINING_TRAINERS 2 +#define HINT_EXIT_SHORT_REMAINING_TRAINERS 3 +#define HINT_EXIT_SHORT_REMAINING_ITEMS 4 +#define HINT_EXIT_MEDIUM_REMAINING_TRAINERS 5 +#define HINT_EXIT_MEDIUM_REMAINING_ITEMS 6 +#define HINT_EXIT_FAR_REMAINING_TRAINERS 7 +#define HINT_EXIT_FAR_REMAINING_ITEMS 8 + #define OBJ_TRAINERS 0 #define OBJ_ITEMS 1 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 9e0d8e0be4..1886043f16 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -124,7 +124,7 @@ #define STRINGID_PKMNSTORINGENERGY 120 #define STRINGID_PKMNUNLEASHEDENERGY 121 #define STRINGID_PKMNFATIGUECONFUSION 122 -#define STRINGID_PKMNPICKEDUPITEM 123 +#define STRINGID_PLAYERPICKEDUPMONEY 123 #define STRINGID_PKMNUNAFFECTED 124 #define STRINGID_PKMNTRANSFORMEDINTO 125 #define STRINGID_PKMNMADESUBSTITUTE 126 diff --git a/include/constants/battle_tower.h b/include/constants/battle_tower.h index b372c3ad5c..f661ddc0bc 100644 --- a/include/constants/battle_tower.h +++ b/include/constants/battle_tower.h @@ -14,7 +14,7 @@ #define BATTLE_TOWER_FUNC_LOAD_PARTNERS 10 #define BATTLE_TOWER_FUNC_PARTNER_MSG 11 #define BATTLE_TOWER_FUNC_LOAD_LINK_OPPONENTS 12 -#define BATTLE_TOWER_FUNC_13 13 +#define BATTLE_TOWER_FUNC_TRY_CLOSE_LINK 13 #define BATTLE_TOWER_FUNC_SET_PARTNER_GFX 14 #define BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA 15 diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index ca312e9570..8e026ef2dc 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -205,7 +205,7 @@ #define OBJ_EVENT_GFX_REGICE 201 #define OBJ_EVENT_GFX_REGISTEEL 202 #define OBJ_EVENT_GFX_SKITTY 203 -#define OBJ_EVENT_GFX_KECLEON_1 204 +#define OBJ_EVENT_GFX_KECLEON 204 #define OBJ_EVENT_GFX_KYOGRE_2 205 #define OBJ_EVENT_GFX_GROUDON_2 206 #define OBJ_EVENT_GFX_RAYQUAZA_2 207 @@ -213,7 +213,7 @@ #define OBJ_EVENT_GFX_PIKACHU 209 #define OBJ_EVENT_GFX_AZUMARILL 210 #define OBJ_EVENT_GFX_WINGULL 211 -#define OBJ_EVENT_GFX_KECLEON_2 212 +#define OBJ_EVENT_GFX_KECLEON_BRIDGE_SHADOW 212 #define OBJ_EVENT_GFX_TUBER_M_SWIMMING 213 #define OBJ_EVENT_GFX_AZURILL 214 #define OBJ_EVENT_GFX_MOM 215 diff --git a/include/constants/flags.h b/include/constants/flags.h index a562b0670e..9be269105e 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1012,7 +1012,7 @@ #define FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_STEVEN 0x3C7 #define FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_BELDUM_POKEBALL 0x3C8 #define FLAG_HIDE_FORTREE_CITY_KECLEON 0x3C9 -#define FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_INVISIBLE 0x3CA +#define FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE 0x3CA #define FLAG_HIDE_LILYCOVE_CITY_RIVAL 0x3CB #define FLAG_HIDE_ROUTE_120_STEVEN 0x3CC #define FLAG_HIDE_SOOTOPOLIS_CITY_STEVEN 0x3CD @@ -1023,7 +1023,7 @@ #define FLAG_HIDE_AQUA_HIDEOUT_B1F_ELECTRODE_2 0x3D2 #define FLAG_HIDE_OLDALE_TOWN_RIVAL 0x3D3 #define FLAG_HIDE_UNDERWATER_SEA_FLOOR_CAVERN_STOLEN_SUBMARINE 0x3D4 -#define FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_VISIBLE 0x3D5 +#define FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_SHADOW 0x3D5 #define FLAG_HIDE_ROUTE_120_KECLEON_1 0x3D6 #define FLAG_HIDE_RUSTURF_TUNNEL_WANDA 0x3D7 #define FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WANDA 0x3D8 diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index 49fcedc617..6e61c4d7f9 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -51,6 +51,11 @@ // fields 6 and onwards are item-specific arguments +// Special HP recovery amounts for ITEM4_HEAL_HP +#define ITEM6_HEAL_FULL ((u8) -1) +#define ITEM6_HEAL_HALF ((u8) -2) +#define ITEM6_HEAL_LVL_UP ((u8) -3) + // Used for GetItemEffectType. #define ITEM_EFFECT_X_ITEM 0 #define ITEM_EFFECT_RAISE_LEVEL 1 diff --git a/include/constants/items.h b/include/constants/items.h index 9496a4c61e..95c6aacfea 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -497,6 +497,10 @@ #define MAX_PC_ITEM_CAPACITY 999 #define MAX_BERRY_CAPACITY 999 +#define BAG_ITEM_CAPACITY_DIGITS 2 +#define BERRY_CAPACITY_DIGITS 3 +#define MAX_ITEM_DIGITS BERRY_CAPACITY_DIGITS + // Secondary IDs for rods #define OLD_ROD 0 #define GOOD_ROD 1 diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 52eabe71bf..d4f6e56844 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -232,6 +232,9 @@ #define STATUS_PRIMARY_POKERUS 6 #define STATUS_PRIMARY_FAINTED 7 +#define MAX_PER_STAT_IVS 31 +#define MAX_IV_MASK 31 +#define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1) #define MAX_PER_STAT_EVS 255 #define MAX_TOTAL_EVS 510 #define EV_ITEM_RAISE_LIMIT 100 @@ -239,12 +242,12 @@ #define UNOWN_FORM_COUNT 28 // Battle move flags -#define FLAG_MAKES_CONTACT 0x1 -#define FLAG_PROTECT_AFFECTED 0x2 -#define FLAG_MAGICCOAT_AFFECTED 0x4 -#define FLAG_SNATCH_AFFECTED 0x8 -#define FLAG_MIRROR_MOVE_AFFECTED 0x10 -#define FLAG_KINGSROCK_AFFECTED 0x20 +#define FLAG_MAKES_CONTACT (1 << 0) +#define FLAG_PROTECT_AFFECTED (1 << 1) +#define FLAG_MAGIC_COAT_AFFECTED (1 << 2) +#define FLAG_SNATCH_AFFECTED (1 << 3) +#define FLAG_MIRROR_MOVE_AFFECTED (1 << 4) +#define FLAG_KINGS_ROCK_AFFECTED (1 << 5) // Growth rates #define GROWTH_MEDIUM_FAST 0 @@ -268,22 +271,22 @@ #define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80 -// Evolution type flags -#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220 -#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220 -#define EVO_FRIENDSHIP_NIGHT 0x0003 // Pokémon levels up at night with friendship ≥ 220 -#define EVO_LEVEL 0x0004 // Pokémon reaches the specified level -#define EVO_TRADE 0x0005 // Pokémon is traded -#define EVO_TRADE_ITEM 0x0006 // Pokémon is traded while it's holding the specified item -#define EVO_ITEM 0x0007 // specified item is used on Pokémon -#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Pokémon reaches the specified level with attack > defense -#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Pokémon reaches the specified level with attack = defense -#define EVO_LEVEL_ATK_LT_DEF 0x000a // Pokémon reaches the specified level with attack < defense -#define EVO_LEVEL_SILCOON 0x000b // Pokémon reaches the specified level with a Silcoon personality value -#define EVO_LEVEL_CASCOON 0x000c // Pokémon reaches the specified level with a Cascoon personality value -#define EVO_LEVEL_NINJASK 0x000d // Pokémon reaches the specified level (special value for Ninjask) -#define EVO_LEVEL_SHEDINJA 0x000e // Pokémon reaches the specified level (special value for Shedinja) -#define EVO_BEAUTY 0x000f // Pokémon levels up with beauty ≥ specified value +// Evolution types +#define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 +#define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 +#define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 +#define EVO_LEVEL 4 // Pokémon reaches the specified level +#define EVO_TRADE 5 // Pokémon is traded +#define EVO_TRADE_ITEM 6 // Pokémon is traded while it's holding the specified item +#define EVO_ITEM 7 // specified item is used on Pokémon +#define EVO_LEVEL_ATK_GT_DEF 8 // Pokémon reaches the specified level with attack > defense +#define EVO_LEVEL_ATK_EQ_DEF 9 // Pokémon reaches the specified level with attack = defense +#define EVO_LEVEL_ATK_LT_DEF 10 // Pokémon reaches the specified level with attack < defense +#define EVO_LEVEL_SILCOON 11 // Pokémon reaches the specified level with a Silcoon personality value +#define EVO_LEVEL_CASCOON 12 // Pokémon reaches the specified level with a Cascoon personality value +#define EVO_LEVEL_NINJASK 13 // Pokémon reaches the specified level (special value for Ninjask) +#define EVO_LEVEL_SHEDINJA 14 // Pokémon reaches the specified level (special value for Shedinja) +#define EVO_BEAUTY 15 // Pokémon levels up with beauty ≥ specified value #define EVOS_PER_MON 5 diff --git a/include/constants/species.h b/include/constants/species.h index 8fa5cf77b0..983e1a7964 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -417,36 +417,36 @@ #define SPECIES_CHIMECHO 411 #define SPECIES_EGG 412 -#define SPECIES_UNOWN_B 413 -#define SPECIES_UNOWN_C 414 -#define SPECIES_UNOWN_D 415 -#define SPECIES_UNOWN_E 416 -#define SPECIES_UNOWN_F 417 -#define SPECIES_UNOWN_G 418 -#define SPECIES_UNOWN_H 419 -#define SPECIES_UNOWN_I 420 -#define SPECIES_UNOWN_J 421 -#define SPECIES_UNOWN_K 422 -#define SPECIES_UNOWN_L 423 -#define SPECIES_UNOWN_M 424 -#define SPECIES_UNOWN_N 425 -#define SPECIES_UNOWN_O 426 -#define SPECIES_UNOWN_P 427 -#define SPECIES_UNOWN_Q 428 -#define SPECIES_UNOWN_R 429 -#define SPECIES_UNOWN_S 430 -#define SPECIES_UNOWN_T 431 -#define SPECIES_UNOWN_U 432 -#define SPECIES_UNOWN_V 433 -#define SPECIES_UNOWN_W 434 -#define SPECIES_UNOWN_X 435 -#define SPECIES_UNOWN_Y 436 -#define SPECIES_UNOWN_Z 437 -#define SPECIES_UNOWN_EMARK 438 -#define SPECIES_UNOWN_QMARK 439 - #define NUM_SPECIES SPECIES_EGG +#define SPECIES_UNOWN_B (NUM_SPECIES + 1) +#define SPECIES_UNOWN_C (SPECIES_UNOWN_B + 1) +#define SPECIES_UNOWN_D (SPECIES_UNOWN_B + 2) +#define SPECIES_UNOWN_E (SPECIES_UNOWN_B + 3) +#define SPECIES_UNOWN_F (SPECIES_UNOWN_B + 4) +#define SPECIES_UNOWN_G (SPECIES_UNOWN_B + 5) +#define SPECIES_UNOWN_H (SPECIES_UNOWN_B + 6) +#define SPECIES_UNOWN_I (SPECIES_UNOWN_B + 7) +#define SPECIES_UNOWN_J (SPECIES_UNOWN_B + 8) +#define SPECIES_UNOWN_K (SPECIES_UNOWN_B + 9) +#define SPECIES_UNOWN_L (SPECIES_UNOWN_B + 10) +#define SPECIES_UNOWN_M (SPECIES_UNOWN_B + 11) +#define SPECIES_UNOWN_N (SPECIES_UNOWN_B + 12) +#define SPECIES_UNOWN_O (SPECIES_UNOWN_B + 13) +#define SPECIES_UNOWN_P (SPECIES_UNOWN_B + 14) +#define SPECIES_UNOWN_Q (SPECIES_UNOWN_B + 15) +#define SPECIES_UNOWN_R (SPECIES_UNOWN_B + 16) +#define SPECIES_UNOWN_S (SPECIES_UNOWN_B + 17) +#define SPECIES_UNOWN_T (SPECIES_UNOWN_B + 18) +#define SPECIES_UNOWN_U (SPECIES_UNOWN_B + 19) +#define SPECIES_UNOWN_V (SPECIES_UNOWN_B + 20) +#define SPECIES_UNOWN_W (SPECIES_UNOWN_B + 21) +#define SPECIES_UNOWN_X (SPECIES_UNOWN_B + 22) +#define SPECIES_UNOWN_Y (SPECIES_UNOWN_B + 23) +#define SPECIES_UNOWN_Z (SPECIES_UNOWN_B + 24) +#define SPECIES_UNOWN_EMARK (SPECIES_UNOWN_B + 25) +#define SPECIES_UNOWN_QMARK (SPECIES_UNOWN_B + 26) + // National Dex Index Defines #define NATIONAL_DEX_NONE 0 @@ -845,31 +845,31 @@ #define NATIONAL_DEX_COUNT NATIONAL_DEX_DEOXYS -#define NATIONAL_DEX_OLD_UNOWN_B 387 -#define NATIONAL_DEX_OLD_UNOWN_C 388 -#define NATIONAL_DEX_OLD_UNOWN_D 389 -#define NATIONAL_DEX_OLD_UNOWN_E 390 -#define NATIONAL_DEX_OLD_UNOWN_F 391 -#define NATIONAL_DEX_OLD_UNOWN_G 392 -#define NATIONAL_DEX_OLD_UNOWN_H 393 -#define NATIONAL_DEX_OLD_UNOWN_I 394 -#define NATIONAL_DEX_OLD_UNOWN_J 395 -#define NATIONAL_DEX_OLD_UNOWN_K 396 -#define NATIONAL_DEX_OLD_UNOWN_L 397 -#define NATIONAL_DEX_OLD_UNOWN_M 398 -#define NATIONAL_DEX_OLD_UNOWN_N 399 -#define NATIONAL_DEX_OLD_UNOWN_O 400 -#define NATIONAL_DEX_OLD_UNOWN_P 401 -#define NATIONAL_DEX_OLD_UNOWN_Q 402 -#define NATIONAL_DEX_OLD_UNOWN_R 403 -#define NATIONAL_DEX_OLD_UNOWN_S 404 -#define NATIONAL_DEX_OLD_UNOWN_T 405 -#define NATIONAL_DEX_OLD_UNOWN_U 406 -#define NATIONAL_DEX_OLD_UNOWN_V 407 -#define NATIONAL_DEX_OLD_UNOWN_W 408 -#define NATIONAL_DEX_OLD_UNOWN_X 409 -#define NATIONAL_DEX_OLD_UNOWN_Y 410 -#define NATIONAL_DEX_OLD_UNOWN_Z 411 +#define NATIONAL_DEX_OLD_UNOWN_B (NATIONAL_DEX_COUNT + 1) +#define NATIONAL_DEX_OLD_UNOWN_C (NATIONAL_DEX_OLD_UNOWN_B + 1) +#define NATIONAL_DEX_OLD_UNOWN_D (NATIONAL_DEX_OLD_UNOWN_B + 2) +#define NATIONAL_DEX_OLD_UNOWN_E (NATIONAL_DEX_OLD_UNOWN_B + 3) +#define NATIONAL_DEX_OLD_UNOWN_F (NATIONAL_DEX_OLD_UNOWN_B + 4) +#define NATIONAL_DEX_OLD_UNOWN_G (NATIONAL_DEX_OLD_UNOWN_B + 5) +#define NATIONAL_DEX_OLD_UNOWN_H (NATIONAL_DEX_OLD_UNOWN_B + 6) +#define NATIONAL_DEX_OLD_UNOWN_I (NATIONAL_DEX_OLD_UNOWN_B + 7) +#define NATIONAL_DEX_OLD_UNOWN_J (NATIONAL_DEX_OLD_UNOWN_B + 8) +#define NATIONAL_DEX_OLD_UNOWN_K (NATIONAL_DEX_OLD_UNOWN_B + 9) +#define NATIONAL_DEX_OLD_UNOWN_L (NATIONAL_DEX_OLD_UNOWN_B + 10) +#define NATIONAL_DEX_OLD_UNOWN_M (NATIONAL_DEX_OLD_UNOWN_B + 11) +#define NATIONAL_DEX_OLD_UNOWN_N (NATIONAL_DEX_OLD_UNOWN_B + 12) +#define NATIONAL_DEX_OLD_UNOWN_O (NATIONAL_DEX_OLD_UNOWN_B + 13) +#define NATIONAL_DEX_OLD_UNOWN_P (NATIONAL_DEX_OLD_UNOWN_B + 14) +#define NATIONAL_DEX_OLD_UNOWN_Q (NATIONAL_DEX_OLD_UNOWN_B + 15) +#define NATIONAL_DEX_OLD_UNOWN_R (NATIONAL_DEX_OLD_UNOWN_B + 16) +#define NATIONAL_DEX_OLD_UNOWN_S (NATIONAL_DEX_OLD_UNOWN_B + 17) +#define NATIONAL_DEX_OLD_UNOWN_T (NATIONAL_DEX_OLD_UNOWN_B + 18) +#define NATIONAL_DEX_OLD_UNOWN_U (NATIONAL_DEX_OLD_UNOWN_B + 19) +#define NATIONAL_DEX_OLD_UNOWN_V (NATIONAL_DEX_OLD_UNOWN_B + 20) +#define NATIONAL_DEX_OLD_UNOWN_W (NATIONAL_DEX_OLD_UNOWN_B + 21) +#define NATIONAL_DEX_OLD_UNOWN_X (NATIONAL_DEX_OLD_UNOWN_B + 22) +#define NATIONAL_DEX_OLD_UNOWN_Y (NATIONAL_DEX_OLD_UNOWN_B + 23) +#define NATIONAL_DEX_OLD_UNOWN_Z (NATIONAL_DEX_OLD_UNOWN_B + 24) // Hoenn Dex Index Defines @@ -1264,30 +1264,30 @@ #define HOENN_DEX_HO_OH 385 #define HOENN_DEX_CELEBI 386 -#define HOENN_DEX_OLD_UNOWN_B 387 -#define HOENN_DEX_OLD_UNOWN_C 388 -#define HOENN_DEX_OLD_UNOWN_D 389 -#define HOENN_DEX_OLD_UNOWN_E 390 -#define HOENN_DEX_OLD_UNOWN_F 391 -#define HOENN_DEX_OLD_UNOWN_G 392 -#define HOENN_DEX_OLD_UNOWN_H 393 -#define HOENN_DEX_OLD_UNOWN_I 394 -#define HOENN_DEX_OLD_UNOWN_J 395 -#define HOENN_DEX_OLD_UNOWN_K 396 -#define HOENN_DEX_OLD_UNOWN_L 397 -#define HOENN_DEX_OLD_UNOWN_M 398 -#define HOENN_DEX_OLD_UNOWN_N 399 -#define HOENN_DEX_OLD_UNOWN_O 400 -#define HOENN_DEX_OLD_UNOWN_P 401 -#define HOENN_DEX_OLD_UNOWN_Q 402 -#define HOENN_DEX_OLD_UNOWN_R 403 -#define HOENN_DEX_OLD_UNOWN_S 404 -#define HOENN_DEX_OLD_UNOWN_T 405 -#define HOENN_DEX_OLD_UNOWN_U 406 -#define HOENN_DEX_OLD_UNOWN_V 407 -#define HOENN_DEX_OLD_UNOWN_W 408 -#define HOENN_DEX_OLD_UNOWN_X 409 -#define HOENN_DEX_OLD_UNOWN_Y 410 -#define HOENN_DEX_OLD_UNOWN_Z 411 +#define HOENN_DEX_OLD_UNOWN_B (HOENN_DEX_CELEBI + 1) +#define HOENN_DEX_OLD_UNOWN_C (HOENN_DEX_OLD_UNOWN_B + 1) +#define HOENN_DEX_OLD_UNOWN_D (HOENN_DEX_OLD_UNOWN_B + 2) +#define HOENN_DEX_OLD_UNOWN_E (HOENN_DEX_OLD_UNOWN_B + 3) +#define HOENN_DEX_OLD_UNOWN_F (HOENN_DEX_OLD_UNOWN_B + 4) +#define HOENN_DEX_OLD_UNOWN_G (HOENN_DEX_OLD_UNOWN_B + 5) +#define HOENN_DEX_OLD_UNOWN_H (HOENN_DEX_OLD_UNOWN_B + 6) +#define HOENN_DEX_OLD_UNOWN_I (HOENN_DEX_OLD_UNOWN_B + 7) +#define HOENN_DEX_OLD_UNOWN_J (HOENN_DEX_OLD_UNOWN_B + 8) +#define HOENN_DEX_OLD_UNOWN_K (HOENN_DEX_OLD_UNOWN_B + 9) +#define HOENN_DEX_OLD_UNOWN_L (HOENN_DEX_OLD_UNOWN_B + 10) +#define HOENN_DEX_OLD_UNOWN_M (HOENN_DEX_OLD_UNOWN_B + 11) +#define HOENN_DEX_OLD_UNOWN_N (HOENN_DEX_OLD_UNOWN_B + 12) +#define HOENN_DEX_OLD_UNOWN_O (HOENN_DEX_OLD_UNOWN_B + 13) +#define HOENN_DEX_OLD_UNOWN_P (HOENN_DEX_OLD_UNOWN_B + 14) +#define HOENN_DEX_OLD_UNOWN_Q (HOENN_DEX_OLD_UNOWN_B + 15) +#define HOENN_DEX_OLD_UNOWN_R (HOENN_DEX_OLD_UNOWN_B + 16) +#define HOENN_DEX_OLD_UNOWN_S (HOENN_DEX_OLD_UNOWN_B + 17) +#define HOENN_DEX_OLD_UNOWN_T (HOENN_DEX_OLD_UNOWN_B + 18) +#define HOENN_DEX_OLD_UNOWN_U (HOENN_DEX_OLD_UNOWN_B + 19) +#define HOENN_DEX_OLD_UNOWN_V (HOENN_DEX_OLD_UNOWN_B + 20) +#define HOENN_DEX_OLD_UNOWN_W (HOENN_DEX_OLD_UNOWN_B + 21) +#define HOENN_DEX_OLD_UNOWN_X (HOENN_DEX_OLD_UNOWN_B + 22) +#define HOENN_DEX_OLD_UNOWN_Y (HOENN_DEX_OLD_UNOWN_B + 23) +#define HOENN_DEX_OLD_UNOWN_Z (HOENN_DEX_OLD_UNOWN_B + 24) #endif // GUARD_CONSTANTS_SPECIES_H diff --git a/include/data.h b/include/data.h index 49b98663ac..260c18152c 100644 --- a/include/data.h +++ b/include/data.h @@ -2,7 +2,6 @@ #define GUARD_DATA_H #include "constants/moves.h" -#include "constants/species.h" #define SPECIES_SHINY_TAG 500 diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 722fe44448..aa1a2e0dc6 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -36,7 +36,7 @@ void sub_808BCE8(void); void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d); void sub_808B864(void); void sub_808BCF4(void); -void sub_808D074(u8); +void SetSpinStartFacingDir(u8); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8); void SetPlayerAvatarFieldMove(void); @@ -57,10 +57,10 @@ void PlayerWheelieMove(u8 direction); void PlayerPopWheelieWhileMoving(u8 direction); void PlayerUseAcroBikeOnBumpySlope(u8 direction); void PlayerEndWheelieWhileMoving(u8 direction); -void sub_808D194(void); -void sub_808D1C8(void); -bool32 sub_808D1B4(void); -bool32 sub_808D1E8(void); +void DoPlayerSpinEntrance(void); +void DoPlayerSpinExit(void); +bool32 IsPlayerSpinEntranceActive(void); +bool32 IsPlayerSpinExitActive(void); void SetPlayerInvisibility(bool8 invisible); u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y); void StartFishing(u8 rod); diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index c4b86856cc..58e9e71788 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -18,8 +18,8 @@ void FieldCB_WarpExitFadeFromBlack(void); void FieldCB_WarpExitFadeFromWhite(void); bool8 FieldCB_ReturnToFieldOpenStartMenu(void); void ReturnToFieldOpenStartMenu(void); -void sub_80AF6D4(void); -void sub_80AF6F0(void); +void FieldCB_ReturnToFieldNoScript(void); +void FieldCB_ReturnToFieldNoScriptCheckMusic(void); void DoWarp(void); void DoDiveWarp(void); void DoSootopolisLegendWarp(void); @@ -35,8 +35,8 @@ void DoCableClubWarp(void); void DoContestHallWarp(void); void AnimateFlash(u8 flashLevel); void WriteBattlePyramidViewScanlineEffectBuffer(void); -void sub_80B0244(void); -void sub_80B0268(void); +void DoSpinEnterWarp(void); +void DoSpinExitWarp(void); void DoOrbEffect(void); void FadeOutOrbEffect(void); void sub_80B05B4(void); diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index bdff1b8651..2d0e1bb1cd 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -67,52 +67,26 @@ struct ToneData u8 release; }; +#define SOUND_CHANNEL_SF_START 0x80 +#define SOUND_CHANNEL_SF_STOP 0x40 +#define SOUND_CHANNEL_SF_LOOP 0x10 +#define SOUND_CHANNEL_SF_IEC 0x04 +#define SOUND_CHANNEL_SF_ENV 0x03 +#define SOUND_CHANNEL_SF_ENV_ATTACK 0x03 +#define SOUND_CHANNEL_SF_ENV_DECAY 0x02 +#define SOUND_CHANNEL_SF_ENV_SUSTAIN 0x01 +#define SOUND_CHANNEL_SF_ENV_RELEASE 0x00 +#define SOUND_CHANNEL_SF_ON (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) + +#define CGB_CHANNEL_MO_PIT 0x02 +#define CGB_CHANNEL_MO_VOL 0x01 + +#define CGB_NRx2_ENV_DIR_DEC 0x00 +#define CGB_NRx2_ENV_DIR_INC 0x08 + struct CgbChannel { - u8 sf; // 0x0 - u8 ty; // 0x1 - u8 rightVolume; // 0x2 - u8 leftVolume; // 0x3 - u8 at; // 0x4 - u8 de; // 0x5 - u8 su; // 0x6 - u8 re; // 0x7 - u8 ky; // 0x8 - u8 ev; // 0x9 - u8 eg; // 0xA - u8 ec; // 0xB - u8 echoVolume; // 0xC - u8 echoLength; // 0xD - u8 d1; // 0xE - u8 d2; // 0xF - u8 gt; // 0x10 - u8 mk; // 0x11 - u8 ve; // 0x12 - u8 pr; // 0x13 - u8 rp; // 0x14 - u8 d3[3]; // 0x15, 0x16, 0x17 - u8 d5; // 0x18 - u8 sg; // 0x19 - u8 n4; // 0x1A - u8 pan; // 0x1B - u8 panMask; // 0x1C - u8 mo; // 0x1D - u8 le; // 0x1E - u8 sw; // 0x1F - u32 fr; // 0x20 - u32 *wp; - u32 cp; - u32 tp; - u32 pp; - u32 np; - u8 d4[8]; -}; - -struct MusicPlayerTrack; - -struct SoundChannel -{ - u8 status; + u8 statusFlags; u8 type; u8 rightVolume; u8 leftVolume; @@ -120,33 +94,128 @@ struct SoundChannel u8 decay; u8 sustain; u8 release; - u8 ky; - u8 ev; - u8 er; - u8 el; - u8 echoVolume; - u8 echoLength; - u8 d1; - u8 d2; - u8 gt; - u8 mk; - u8 ve; - u8 pr; - u8 rp; - u8 d3[3]; - u32 ct; - u32 fw; - u32 freq; - struct WaveData *wav; - u32 cp; + u8 key; + u8 envelopeVolume; + u8 envelopeGoal; + u8 envelopeCounter; + u8 pseudoEchoVolume; + u8 pseudoEchoLength; + u8 dummy1; + u8 dummy2; + u8 gateTime; + u8 midiKey; + u8 velocity; + u8 priority; + u8 rhythmPan; + u8 dummy3[3]; + u8 dummy5; + u8 sustainGoal; + u8 n4; // NR[1-4]4 register (initial, length bit) + u8 pan; + u8 panMask; + u8 modify; + u8 length; + u8 sweep; + u32 frequency; + u32 *wavePointer; // instructs CgbMain to load targeted wave + u32 *currentPointer; // stores the currently loaded wave struct MusicPlayerTrack *track; - void *pp; - void *np; - void *d4; + void *prevChannelPointer; + void *nextChannelPointer; + u8 dummy4[8]; +}; + +struct MusicPlayerTrack; + +struct SoundChannel +{ + u8 statusFlags; + u8 type; + u8 rightVolume; + u8 leftVolume; + u8 attack; + u8 decay; + u8 sustain; + u8 release; + u8 key; // midi key as it was translated into final pitch + u8 envelopeVolume; + u8 envelopeVolumeRight; + u8 envelopeVolumeLeft; + u8 pseudoEchoVolume; + u8 pseudoEchoLength; + u8 dummy1; + u8 dummy2; + u8 gateTime; + u8 midiKey; // midi key as it was used in the track data + u8 velocity; + u8 priority; + u8 rhythmPan; + u8 dummy3[3]; + u32 count; + u32 fw; + u32 frequency; + struct WaveData *wav; + s8 *currentPointer; + struct MusicPlayerTrack *track; + void *prevChannelPointer; + void *nextChannelPointer; + u32 dummy4; u16 xpi; u16 xpc; }; +#define MAX_DIRECTSOUND_CHANNELS 12 + +#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer + +struct MusicPlayerInfo; + +typedef void (*MPlayFunc)(); +typedef void (*PlyNoteFunc)(u32, struct MusicPlayerInfo *, struct MusicPlayerTrack *); +typedef void (*CgbSoundFunc)(void); +typedef void (*CgbOscOffFunc)(u8); +typedef u32 (*MidiKeyToCgbFreqFunc)(u8, u8, u8); +typedef void (*ExtVolPitFunc)(void); +typedef void (*MPlayMainFunc)(struct MusicPlayerInfo *); + +struct SoundInfo +{ + // This field is normally equal to ID_NUMBER but it is set to other + // values during sensitive operations for locking purposes. + // This field should be volatile but isn't. This could potentially cause + // race conditions. + u32 ident; + + vu8 pcmDmaCounter; + + // Direct Sound + u8 reverb; + u8 maxChans; + u8 masterVolume; + u8 freq; + + u8 mode; + u8 c15; // periodically counts from 14 down to 0 (15 states) + u8 pcmDmaPeriod; // number of V-blanks per PCM DMA + u8 maxLines; + u8 gap[3]; + s32 pcmSamplesPerVBlank; + s32 pcmFreq; + s32 divFreq; + struct CgbChannel *cgbChans; + MPlayMainFunc MPlayMainHead; + struct MusicPlayerInfo *musicPlayerHead; + CgbSoundFunc CgbSound; + CgbOscOffFunc CgbOscOff; + MidiKeyToCgbFreqFunc MidiKeyToCgbFreq; + MPlayFunc *MPlayJumpTable; + PlyNoteFunc plynote; + ExtVolPitFunc ExtVolPit; + u8 gap2[16]; + struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; + s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; +}; + struct SongHeader { u8 trackCount; @@ -228,8 +297,8 @@ struct MusicPlayerTrack u8 lfoDelay; u8 lfoDelayC; u8 priority; - u8 echoVolume; - u8 echoLength; + u8 pseudoEchoVolume; + u8 pseudoEchoLength; struct SoundChannel *chan; struct ToneData tone; u8 gap[10]; @@ -270,8 +339,8 @@ struct MusicPlayerInfo struct MusicPlayerTrack *tracks; struct ToneData *tone; u32 ident; - void (*func)(); - u32 intp; + MPlayMainFunc MPlayMainNext; + struct MusicPlayerInfo *musicPlayerNext; }; struct MusicPlayer @@ -292,47 +361,7 @@ struct Song extern const struct MusicPlayer gMPlayTable[]; extern const struct Song gSongTable[]; -#define MAX_DIRECTSOUND_CHANNELS 12 -#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer - -struct SoundInfo -{ - // This field is normally equal to ID_NUMBER but it is set to other - // values during sensitive operations for locking purposes. - // This field should be volatile but isn't. This could potentially cause - // race conditions. - u32 ident; - - vu8 pcmDmaCounter; - - // Direct Sound - u8 reverb; - u8 maxChans; - u8 masterVolume; - u8 freq; - - u8 mode; - u8 c15; - u8 pcmDmaPeriod; // number of V-blanks per PCM DMA - u8 maxLines; - u8 gap[3]; - s32 pcmSamplesPerVBlank; - s32 pcmFreq; - s32 divFreq; - struct CgbChannel *cgbChans; - void (*func)(); - u32 intp; - void (*CgbSound)(); - void (*CgbOscOff)(u8); - u32 (*MidiKeyToCgbFreq)(u8, u8, u8); - void (**MPlayJumpTable)(); - void (*plynote)(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); - void (*ExtVolPit)(struct MusicPlayerInfo *, struct MusicPlayerTrack *); - u32 gap2[4]; - struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS]; - s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; -}; extern u8 gMPlayMemAccArea[]; @@ -349,7 +378,7 @@ extern struct MusicPlayerTrack gPokemonCryTracks[]; extern char SoundMainRAM[]; -extern void *gMPlayJumpTable[]; +extern MPlayFunc gMPlayJumpTable[]; typedef void (*XcmdFunc)(struct MusicPlayerInfo *, struct MusicPlayerTrack *); extern const XcmdFunc gXcmdTable[]; @@ -378,7 +407,7 @@ u32 umul3232H32(u32 multiplier, u32 multiplicand); void SoundMain(void); void SoundMainBTM(void); void TrackStop(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track); -void MPlayMain(void); +void MPlayMain(struct MusicPlayerInfo *); void RealClearChain(void *x); void MPlayContinue(struct MusicPlayerInfo *mplayInfo); @@ -398,7 +427,7 @@ void CgbOscOff(u8); void CgbModVol(struct CgbChannel *chan); u32 MidiKeyToCgbFreq(u8, u8, u8); void DummyFunc(void); -void MPlayJumpTableCopy(void **mplayJumpTable); +void MPlayJumpTableCopy(MPlayFunc *mplayJumpTable); void SampleFreqSet(u32 freq); void m4aSoundVSyncOn(void); void m4aSoundVSyncOff(void); @@ -446,7 +475,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_note(u32 note_cmd, struct MusicPlayerInfo *, struct MusicPlayerTrack *); // extended sound command handler functions void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index cef6d810b8..7270b05dd4 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -195,15 +195,10 @@ struct ObjectEvent /*0x0C*/ struct Coords16 initialCoords; /*0x10*/ struct Coords16 currentCoords; /*0x14*/ struct Coords16 previousCoords; - /*0x18*/ u8 facingDirection:4; // current direction? - /*0x18*/ u8 movementDirection:4; - /*0x19*/ union __attribute__((packed)) { - u8 as_byte; - struct __attribute__((packed)) { - u8 x:4; - u8 y:4; - } ALIGNED(1) as_nybbles; - } ALIGNED(1) range; + /*0x18*/ u16 facingDirection:4; // current direction? + u16 movementDirection:4; + u16 rangeX:4; + u16 rangeY:4; /*0x1A*/ u8 fieldEffectSpriteId; /*0x1B*/ u8 warpArrowSpriteId; /*0x1C*/ u8 movementActionId; @@ -219,8 +214,8 @@ struct ObjectEvent struct ObjectEventGraphicsInfo { /*0x00*/ u16 tileTag; - /*0x02*/ u16 paletteTag1; - /*0x04*/ u16 paletteTag2; + /*0x02*/ u16 paletteTag; + /*0x04*/ u16 reflectionPaletteTag; /*0x06*/ u16 size; /*0x08*/ s16 width; /*0x0A*/ s16 height; diff --git a/include/global.h b/include/global.h index 8c51670410..4ccd2be50a 100644 --- a/include/global.h +++ b/include/global.h @@ -8,6 +8,7 @@ #include "constants/global.h" #include "constants/flags.h" #include "constants/vars.h" +#include "constants/species.h" // Prevent cross-jump optimization. #define BLOCK_CROSS_JUMP asm(""); @@ -65,8 +66,6 @@ // Converts a Q24.8 fixed-point format number to a regular integer #define Q_24_8_TO_INT(n) ((int)((n) >> 8)) -#define POKEMON_SLOTS_NUMBER 412 - #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b)) @@ -99,7 +98,7 @@ #define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr) // Macros for checking the joypad -#define TEST_BUTTON(field, button) ((field) & (button)) +#define TEST_BUTTON(field, button) ({(field) & (button);}) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) #define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button) #define JOY_HELD_RAW(button) TEST_BUTTON(gMain.heldKeysRaw, button) @@ -115,7 +114,7 @@ #define ROUND_BITS_TO_BYTES(numBits)(((numBits) / 8) + (((numBits) % 8) ? 1 : 0)) -#define DEX_FLAGS_NO (ROUND_BITS_TO_BYTES(POKEMON_SLOTS_NUMBER)) +#define DEX_FLAGS_NO (ROUND_BITS_TO_BYTES(NUM_SPECIES)) #define NUM_FLAG_BYTES (ROUND_BITS_TO_BYTES(FLAGS_COUNT)) struct Coords8 @@ -329,11 +328,12 @@ struct BattleDomeTrainer }; #define DOME_TOURNAMENT_TRAINERS_COUNT 16 +#define BATTLE_TOWER_RECORD_COUNT 5 struct BattleFrontier { /*0x64C*/ struct EmeraldBattleTowerRecord towerPlayer; - /*0x738*/ struct EmeraldBattleTowerRecord towerRecords[5]; // From record mixing. + /*0x738*/ struct EmeraldBattleTowerRecord towerRecords[BATTLE_TOWER_RECORD_COUNT]; // From record mixing. /*0xBEB*/ struct BattleTowerInterview towerInterview; /*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0xCA8*/ u8 challengeStatus; diff --git a/include/graphics.h b/include/graphics.h index 32268d6dbd..d3d01bc579 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4087,8 +4087,8 @@ extern const u32 gConfetti_Gfx[]; extern const u32 gConfetti_Pal[]; extern const u32 gUnknown_08C093F0[]; -extern const u32 gSubstituteDollTilemap[]; -extern const u32 gSubstituteDollGfx[]; +extern const u32 gSubstituteDollBackGfx[]; +extern const u32 gSubstituteDollFrontGfx[]; extern const u32 gSubstituteDollPal[]; extern const u32 gHealthboxSinglesPlayerGfx[]; extern const u32 gHealthboxSinglesOpponentGfx[]; @@ -5014,4 +5014,15 @@ extern const u16 gPokenavMessageBox_Pal[]; extern const u32 gPokenavOptions_Gfx[]; extern const u16 gPokenavOptions_Pal[]; +// Battle Factory Screen +extern const u8 gFrontierFactorySelectMenu_Gfx[]; +extern const u8 gFrontierFactorySelectMenu_Tilemap[]; +extern const u16 gFrontierFactorySelectMenu_Pal[]; + +// Object event pals +extern const u16 gObjectEventPal_Brendan[]; +extern const u16 gObjectEventPal_May[]; +extern const u16 gObjectEventPal_RubySapphireBrendan[]; +extern const u16 gObjectEventPal_RubySapphireMay[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/list_menu.h b/include/list_menu.h index 4697ba5aa6..0a54a069ad 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -24,7 +24,7 @@ struct ListMenu; struct ListMenuItem { const u8 *name; - u32 id; + s32 id; }; struct ListMenuTemplate @@ -98,7 +98,7 @@ struct CursorStruct extern struct ScrollArrowsTemplate gTempScrollArrowTemplate; extern struct ListMenuTemplate gMultiuseListMenuTemplate; -u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum); u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *arg1, u16 scrollOffset, u16 selectedRow); s32 ListMenu_ProcessInput(u8 listTaskId); diff --git a/include/menu.h b/include/menu.h index 1bd8007426..c9d8e374df 100644 --- a/include/menu.h +++ b/include/menu.h @@ -4,6 +4,7 @@ #include "task.h" #include "text.h" #include "window.h" +#include "constants/pokemon.h" #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 @@ -14,6 +15,14 @@ #define MENU_CURSOR_DELTA_LEFT -1 #define MENU_CURSOR_DELTA_RIGHT 1 +#define MENU_INFO_ICON_TYPE (NUMBER_OF_MON_TYPES + 1) +#define MENU_INFO_ICON_POWER (NUMBER_OF_MON_TYPES + 2) +#define MENU_INFO_ICON_ACCURACY (NUMBER_OF_MON_TYPES + 3) +#define MENU_INFO_ICON_PP (NUMBER_OF_MON_TYPES + 4) +#define MENU_INFO_ICON_EFFECT (NUMBER_OF_MON_TYPES + 5) +#define MENU_INFO_ICON_BALL_RED (NUMBER_OF_MON_TYPES + 6) +#define MENU_INFO_ICON_BALL_BLUE (NUMBER_OF_MON_TYPES + 7) + enum { SAVE_MENU_NAME, @@ -61,7 +70,7 @@ u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 numItems, u8 i u8 Menu_GetCursorPos(void); s8 Menu_ProcessInput(void); s8 Menu_ProcessInputNoWrap(void); -void blit_move_info_icon(u8 winId, u8 a2, u16 x, u16 y); +void BlitMenuInfoIcon(u8 winId, u8 a2, u16 x, u16 y); void ResetTempTileDataBuffers(void); void *DecompressAndCopyTileDataToVram(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); bool8 FreeTempTileDataBuffersIfPossible(void); diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 242e1c6b2f..987fca9fc2 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -23,7 +23,7 @@ struct UnknownSubStruct_81D1ED4 struct ConditionGraph { - /*0x000*/ u8 unk0[4][FLAVOR_COUNT]; + /*0x000*/ u8 stat[4][FLAVOR_COUNT]; /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][FLAVOR_COUNT]; /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][FLAVOR_COUNT]; /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[FLAVOR_COUNT]; @@ -32,7 +32,7 @@ struct ConditionGraph /*0x350*/ u16 unk350; /*0x352*/ u16 unk352; /*0x354*/ u8 unk354; - /*0x355*/ u8 unk355; + /*0x355*/ u8 state; }; bool8 sub_81D1C44(u8 count); @@ -41,12 +41,12 @@ u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page); void sub_81D1E90(struct PlayerPCItemPageStruct *page); void sub_81D1EC0(void); void sub_81D1D04(u8 a0); -void sub_81D1ED4(struct ConditionGraph *graph); +void InitConditionGraphData(struct ConditionGraph *graph); void sub_81D2108(struct ConditionGraph *graph); -void sub_81D21DC(u8 bg); -void sub_81D20AC(struct ConditionGraph *graph); +void SetConditionGraphIOWindows(u8 bg); +void InitConditionGraphState(struct ConditionGraph *graph); void sub_81D2230(struct ConditionGraph *graph); -bool8 sub_81D20BC(struct ConditionGraph *graph); +bool8 SetupConditionGraphScanlineParams(struct ConditionGraph *graph); bool32 TransitionConditionGraph(struct ConditionGraph *graph); void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1); void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2); diff --git a/include/mon_markings.h b/include/mon_markings.h index 241b31e014..3cb04ad48c 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -29,8 +29,8 @@ bool8 sub_811F960(void); void sub_811FA90(void); void sub_811FAA4(u8 markings, s16 x, s16 y); void sub_811FAF8(void); -bool8 sub_811FBA4(void); -struct Sprite *sub_811FF94(u16 tileTag, u16 paletteTag, const u16 *palette); +bool8 MonMarkingsMenuHandleInput(void); +struct Sprite *CreateMonMarkingsSpriteWithPal(u16 tileTag, u16 paletteTag, const u16 *palette); struct Sprite *sub_811FFB4(u16 tileTag, u16 paletteTag, const u16 *palette); void sub_8120084(u8 markings, void *dest); diff --git a/include/pokemon.h b/include/pokemon.h index 81c17f545b..497e8070b4 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -127,8 +127,8 @@ struct Unknown_806F160_Struct u32 field_0_1:4; u32 field_1:8; u16 magic:8; - u32 size:4; - u16 field_3_1:4; + u32 field_3_0:4; + u32 field_3_1:4; void *bytes; u8 **byteArrays; struct SpriteTemplate *templates; @@ -275,7 +275,7 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src); void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50); void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); -void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest); +void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 sub_80688F8(u8 caseId, u8 battlerId); void SetDeoxysStats(void); @@ -381,7 +381,7 @@ void ClearBattleMonForms(void); u16 GetBattleBGM(void); void PlayBattleBGM(void); void PlayMapChosenOrBattleBGM(u16 songId); -void sub_806E694(u16 songId); +void CreateTask_PlayMapChosenOrBattleBGM(u16 songId); const u32 *GetMonFrontSpritePal(struct Pokemon *mon); const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality); const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon); diff --git a/include/pokenav.h b/include/pokenav.h index ed4e5a9061..3fc01ede3d 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -27,17 +27,17 @@ struct PokenavListTemplate struct PokenavMonList *monList; struct PokenavMatchCallEntries *matchCallEntries; } list; - u16 unk4; + u16 count; u16 unk6; u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - u8 unkC; - u8 unkD; - u8 unkE; + u8 item_X; + u8 windowWidth; + u8 listTop; + u8 maxShowed; + u8 fillValue; + u8 fontId; union { - void (*unk10_1)(struct PokenavMonList *, u8 *a1); + void (*printMonFunc)(struct PokenavMonList *item, u8 *dest); void (*unk10_2)(struct PokenavMatchCallEntries *, u8 *a1); } listFunc; void (*unk14)(u16 a0, u32 a1, u32 a2); @@ -45,9 +45,9 @@ struct PokenavListTemplate struct PokenavSub18 { - u16 unk0; - u16 unk2; - struct PokenavMonList unk4[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; + u16 listCount; + u16 currIndex; + struct PokenavMonList monData[TOTAL_BOXES_COUNT * IN_BOX_COUNT + PARTY_SIZE]; }; // Return values of LoopedTask functions. @@ -65,6 +65,31 @@ enum POKENAV_MODE_FORCE_CALL_EXIT, // Pokenav tutorial after calling Mr. Stone }; +// TODO - refine these names +enum Substructures +{ + POKENAV_SUBSTRUCT_MAIN_MENU, + POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, + POKENAV_SUBSTRUCT_MENU_ICONS, + POKENAV_SUBSTRUCT_REGION_MAP_STATE, + POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, + POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, + POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, + POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, + POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, + POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, + POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, + POKENAV_SUBSTRUCT_CONDITION_GRAPH, + POKENAV_SUBSTRUCT_MON_MARK_MENU, + POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, + POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, + POKENAV_SUBSTRUCT_15, //unused + POKENAV_SUBSTRUCT_REGION_MAP, + POKENAV_SUBSTRUCT_MATCH_CALL_LIST, + POKENAV_SUBSTRUCT_MON_LIST, + POKENAV_SUBSTRUCT_COUNT, +}; + enum { POKENAV_GFX_MAIN_MENU, @@ -97,12 +122,12 @@ enum POKENAV_REGION_MAP, POKENAV_CONDITION_PARTY, POKENAV_CONDITION_SEARCH_RESULTS, - POKENAV_MENU_9, // Condition - POKENAV_MENU_A, // Condition + POKENAV_CONDITION_GRAPH_FROM_SEARCH, // opening condition graph from search list + POKENAV_RETURN_CONDITION_SEARCH, //return to search list from condition graph POKENAV_MATCH_CALL, POKENAV_RIBBONS_MON_LIST, - POKENAV_MENU_D, // Ribbons - POKENAV_MENU_E, // Ribbons + POKENAV_RIBBONS_SUMMARY_SCREEN, + POKENAV_RIBBONS_RETURN_TO_MON_LIST, }; enum @@ -207,7 +232,7 @@ enum // Pokenav Function IDs // Indices into the LoopedTask tables for each of the main Pokenav features -enum +enum RegionMapFuncIds { POKENAV_MENU_FUNC_NONE, POKENAV_MENU_FUNC_MOVE_CURSOR, @@ -220,6 +245,19 @@ enum POKENAV_MENU_FUNC_OPEN_FEATURE, }; +enum PartyConditionFuncIds +{ + PARTY_CONDITION_FUNC_NONE, + PARTY_CONDITION_FUNC_SLIDE_MON_IN, + PARTY_CONDITION_FUNC_RETURN, + PARTY_CONDITION_FUNC_NO_TRANSITION, + PARTY_CONDITION_FUNC_SLIDE_MON_OUT, + PARTY_CONDITION_FUNC_ADD_MARKINGS, + PARTY_CONDITION_FUNC_CLOSE_MARKINGS, +}; + +#define POKENAV_MENU_FUNC_EXIT -1 + enum { POKENAV_MC_FUNC_NONE, @@ -268,17 +306,17 @@ void SetPokenavVBlankCallback(void); void SetVBlankCallback_(IntrCallback callback); // pokenav_match_call_ui.c -u32 GetSelectedMatchCall(void); +u32 GetSelectedPokenavListIndex(void); bool32 sub_81C8224(void); int MatchCall_MoveCursorUp(void); int MatchCall_MoveCursorDown(void); int MatchCall_PageDown(void); int MatchCall_PageUp(void); -bool32 sub_81C8630(void); +bool32 IsMonListLoopedTaskActive(void); void ToggleMatchCallVerticalArrows(bool32 shouldHide); void sub_81C8838(void); void sub_81C877C(void); -bool32 sub_81C8820(void); +bool32 IsMatchCallListTaskActive(void); void PrintCheckPageInfo(s16 a0); u32 GetMatchCallListTopIndex(void); void sub_81C87F0(void); @@ -300,30 +338,30 @@ void MatchCall_GetNameAndDesc(u32 idx, const u8 **desc, const u8 **name); // pokenav_main_menu.c bool32 InitPokenavMainMenu(void); void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size); -void sub_81C7850(u32 a0); -u32 sub_81C786C(void); +void RunMainMenuLoopedTask(u32 a0); +u32 IsActiveMenuLoopTaskActive(void); void LoadLeftHeaderGfxForIndex(u32 arg0); -void sub_81C7FA0(u32 arg0, bool32 arg1, bool32 arg2); +void ShowLeftHeaderGfx(u32 menugfxId, bool32 arg1, bool32 isOnRightSide); void PokenavFadeScreen(s32 fadeType); -bool32 sub_81C8010(void); +bool32 AreLeftHeaderSpritesMoving(void); void InitBgTemplates(const struct BgTemplate *templates, int count); bool32 IsPaletteFadeActive(void); void PrintHelpBarText(u32 textId); bool32 WaitForHelpBar(void); -void sub_81C78A0(void); +void SlideMenuHeaderDown(void); bool32 MainMenuLoopedTaskIsBusy(void); -void sub_81C7FDC(void); -void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); +void SetLeftHeaderSpritesInvisibility(void); +void PokenavCopyPalette(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette); void sub_81C7B40(void); struct Sprite *PauseSpinningPokenavSprite(void); void ResumeSpinningPokenavSprite(void); -void sub_81C7E14(u32 arg0); -void sub_81C7FC4(u32 arg0, bool32 arg1); -void sub_81C7880(void); -void sub_81C7990(u32 a0, u16 a1); +void UpdateRegionMapRightHeaderTiles(u32 arg0); +void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide); +void SlideMenuHeaderUp(void); +void PokenavFillPalette(u32 palIndex, u16 fillValue); u32 PokenavMainMenuLoopedTaskIsActive(void); bool32 WaitForPokenavShutdownFade(void); -void sub_81C7834(void *func1, void *func2); +void SetActiveMenuLoopTasks(void *func1, void *func2); void ShutdownPokenav(void); // pokenav_menu_handler_1.c @@ -345,7 +383,7 @@ bool32 OpenPokenavMenuNotInitial(void); void CreateMenuHandlerLoopedTask(s32 ltIdx); bool32 IsMenuHandlerLoopedTaskActive(void); void FreeMenuHandlerSubstruct2(void); -void sub_81CAADC(void); +void ResetBldCnt_(void); // pokenav_match_call_1.c bool32 PokenavCallback_Init_MatchCall(void); @@ -364,7 +402,7 @@ const u8 *GetMatchCallMessageText(int index, u8 *arg1); u16 GetMatchCallOptionCursorPos(void); u16 GetMatchCallOptionId(int arg0); void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries * arg0, u8 *str); -u8 sub_81CB0C8(int rematchIndex); +u8 GetMatchTableMapSectionId(int rematchIndex); int GetIndexDeltaOfNextCheckPageDown(int index); int GetIndexDeltaOfNextCheckPageUp(int index); bool32 IsRematchEntryRegistered(int index); @@ -385,60 +423,60 @@ void FreeRegionMapSubstruct1(void); void FreeRegionMapSubstruct2(void); // pokenav_conditions_1.c -u32 PokenavCallback_Init_7(void); -u32 PokenavCallback_Init_9(void); -u32 sub_81CD070(void); -void sub_81CD1C0(void); -bool32 sub_81CD3C4(void); -bool32 sub_81CDD5C(void); -struct ConditionGraph *sub_81CDC70(void); -u16 sub_81CDC60(void); -u16 sub_81CDC50(void); -u8 sub_81CDDB0(void); -bool32 sub_81CD548(u8 arg0); -u8 sub_81CDD7C(void); -u8 *sub_81CDD04(u8 id); -u8 *sub_81CDD24(u8 id); -u16 sub_81CDD48(void); -void *sub_81CDCB4(u8 id); -void *sub_81CDCD4(u8 id); +u32 PokenavCallback_Init_PartyCondition(void); +u32 PokenavCallback_Init_ConditionGraphFromSearch(void); +u32 GetPartyConditionCallback(void); +void FreePartyConditionSubstruct1(void); +bool32 LoadPartyConditionMenuGfx(void); +bool32 IsConditionMenuSearchMode(void); +struct ConditionGraph *GetConditionGraphDataPtr(void); +u16 GetConditionGraphCurrentMonIndex(void); +u16 GetMonListCount(void); +u8 GetMonSheen(void); +bool32 SetConditionGraphData(u8 arg0); +u8 TryGetMonMarkId(void); +u8 *GetConditionMonNameBuffer(u8 id); +u8 *GetConditionMonLocationBuffer(u8 id); +u16 GetConditionMonDataBuffer(void); +void *GetConditionMonPicGfx(u8 id); +void *GetConditionMonPal(u8 id); // pokenav_conditions_2.c -bool32 sub_81CDDD4(void); -void sub_81CDE2C(s32); -u32 sub_81CDE64(void); -void sub_81CECA0(void); -u8 sub_81CEF14(void); +bool32 OpenPartyConditionMenu(void); +void CreatePartyConditionLoopedTask(s32); +u32 IsPartyConditionLoopedTaskActive(void); +void FreePartyConditionSubstruct2(void); +u8 GetMonMarkingsData(void); // pokenav_conditions_3.c -u32 PokenavCallback_Init_8(void); -u32 PokenavCallback_Init_10(void); -u32 sub_81CEFDC(void); -void sub_81CEFF0(void); -bool32 sub_81CF330(void); -bool32 sub_81CF368(void); -void sub_81CF3A0(s32); -u32 sub_81CF3D0(void); -void sub_81CF3F8(void); +u32 PokenavCallback_Init_ConditionSearch(void); +u32 PokenavCallback_Init_ReturnToMonSearchList(void); +u32 GetConditionSearchResultsCallback(void); +void FreeSearchResultSubstruct1(void); +bool32 OpenConditionSearchResults(void); +bool32 OpenConditionSearchListFromGraph(void); +void CreateSearchResultsLoopedTask(s32); +u32 IsSearchResultLoopedTaskActive(void); +void FreeSearchResultSubstruct2(void); // pokenav_ribbons_1.c -u32 PokenavCallback_Init_12(void); -u32 PokenavCallback_Init_14(void); -u32 sub_81CFA34(void); -void sub_81CFA48(void); -bool32 sub_81CFDD0(void); -bool32 sub_81CFE08(void); -void sub_81CFE40(s32); -u32 sub_81CFE70(void); -void sub_81CFE98(void); +u32 PokenavCallback_Init_MonRibbonList(void); +u32 PokenavCallback_Init_RibbonsMonListFromSummary(void); +u32 GetRibbonsMonListCallback(void); +void FreeRibbonsMonList1(void); +bool32 OpenRibbonsMonList(void); +bool32 OpenRibbonsMonListFromRibbonsSummary(void); +void CreateRibbonsMonListLoopedTask(s32); +u32 IsRibbonsMonListLoopedTaskActive(void); +void FreeRibbonsMonList2(void); // pokenav_ribbons_2.c -u32 PokenavCallback_Init_13(void); -u32 sub_81D04A0(void); -void sub_81D04B8(void); -bool32 sub_81D0978(void); -void sub_81D09B0(s32); -u32 sub_81D09E0(void); -void sub_81D09F4(void); +u32 PokenavCallback_Init_RibbonsSummaryMenu(void); +u32 GetRibbonsSummaryMenuCallback(void); +void FreeRibbonsSummaryScreen1(void); +bool32 OpenRibbonsSummaryMenu(void); +void CreateRibbonsSummaryLoopedTask(s32); +u32 IsRibbonsSummaryLoopedTaskActive(void); +void FreeRibbonsSummaryScreen2(void); #endif // GUARD_POKENAV_H diff --git a/include/recorded_battle.h b/include/recorded_battle.h index 84c5c2ea29..252b25502f 100644 --- a/include/recorded_battle.h +++ b/include/recorded_battle.h @@ -30,7 +30,7 @@ void sub_818603C(u8 arg0); u32 GetAiScriptsInRecordedBattle(void); void sub_8186444(void); bool8 sub_8186450(void); -void sub_8186468(u8 *dst); +void GetRecordedBattleRecordMixFriendName(u8 *dst); u8 GetRecordedBattleRecordMixFriendClass(void); u8 GetRecordedBattleApprenticeId(void); u8 GetRecordedBattleRecordMixFriendLanguage(void); diff --git a/include/strings.h b/include/strings.h index 7018f9e0d3..294ab8aa6f 100644 --- a/include/strings.h +++ b/include/strings.h @@ -2988,4 +2988,31 @@ extern const u8 gText_SavingDontTurnOff2[]; extern const u8 gText_BlenderMaxSpeedRecord[]; extern const u8 gText_234Players[]; +// Battle Factory Screen +extern const u8 gText_RentalPkmn2[]; +extern const u8 gText_SelectFirstPkmn[]; +extern const u8 gText_SelectSecondPkmn[]; +extern const u8 gText_SelectThirdPkmn[]; +extern const u8 gText_TheseThreePkmnOkay[]; +extern const u8 gText_CantSelectSamePkmn[]; +extern const u8 gText_Summary[]; +extern const u8 gText_Rechoose[]; +extern const u8 gText_Deselect[]; +extern const u8 gText_Rent[]; +extern const u8 gText_Others2[]; +extern const u8 gText_Yes2[]; +extern const u8 gText_Yes3[]; +extern const u8 gText_No2[]; +extern const u8 gText_No3[]; +extern const u8 gText_QuitSwapping[]; +extern const u8 gText_AcceptThisPkmn[]; +extern const u8 gText_SelectPkmnToAccept[]; +extern const u8 gText_SelectPkmnToSwap[]; +extern const u8 gText_PkmnSwap[]; +extern const u8 gText_Swap[]; +extern const u8 gText_Summary2[]; +extern const u8 gText_PkmnForSwap[]; +extern const u8 gText_SamePkmnInPartyAlready[]; +extern const u8 gText_Cancel3[]; + #endif // GUARD_STRINGS_H diff --git a/libagbsyscall/libagbsyscall.s b/libagbsyscall/libagbsyscall.s index 0c90da9ed0..00c40d08e0 100644 --- a/libagbsyscall/libagbsyscall.s +++ b/libagbsyscall/libagbsyscall.s @@ -1,12 +1,9 @@ .include "../constants/gba_constants.inc" .include "../asm/macros/function.inc" - - .syntax unified .text .set SOFT_RESET_DIRECT_BUF, 0x03007FFA - .set USER_STACK, 0x03007F00 .set RESET_EX_WRAM_FLAG, 0x1 .ifdef NO_GRANULAR_AGBSYSCALL @@ -109,7 +106,7 @@ SoundDriverVSyncOn: thumb_func_start Mod Mod: svc #6 - adds r0, r1, #0 + mov r0, r1 bx lr thumb_func_end Mod .endif @@ -148,7 +145,7 @@ HuffUnComp: .endif .ifdef L_SoftResetExram - thumb_func_start SoftResetExram + arm_func_start SoftResetExram SoftResetExram: ldr r3, =REG_IME movs r2, #0 @@ -156,14 +153,14 @@ SoftResetExram: ldr r3, =SOFT_RESET_DIRECT_BUF movs r2, #1 strb r2, [r3, #0] - subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK + subs r3, #SOFT_RESET_DIRECT_BUF - 0x3007f00 mov sp, r3 movs r2, #RESET_EX_WRAM_FLAG bics r0, r2 svc #1 svc #0 .pool - thumb_func_end SoftResetExram + arm_func_end SoftResetExram .endif .ifdef L_MusicPlayerFadeOut @@ -234,7 +231,7 @@ DivArm: thumb_func_start ModArm ModArm: svc #7 - adds r0, r1, #0 + mov r0, r1 bx lr thumb_func_end ModArm .endif @@ -274,7 +271,7 @@ Diff8bitUnFilterWram: .ifdef L_MultiBoot thumb_func_start MultiBoot MultiBoot: - movs r1, #1 + mov r1, #1 svc #37 bx lr thumb_func_end MultiBoot @@ -329,7 +326,7 @@ SoftResetRom: ldr r3, =SOFT_RESET_DIRECT_BUF movs r2, #0 strb r2, [r3, #0] - subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK + sub r3, #SOFT_RESET_DIRECT_BUF - 0x3007f00 mov sp, r3 svc #1 svc #0 @@ -416,7 +413,7 @@ SoftReset: ldr r3, =REG_IME movs r2, #0 strb r2, [r3, #0] - ldr r1, =USER_STACK + ldr r1, =0x3007f00 mov sp, r1 svc #1 svc #0 diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 34410f1e16..508e6a6c44 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -143,8 +143,8 @@ DirectSoundWaveData_ethnic_flavours_atarigane:: .incbin "sound/direct_sound_samples/ethnic_flavours_atarigane.bin" .align 2 -DirectSoundWaveData_unknown_taiko:: - .incbin "sound/direct_sound_samples/unknown_taiko.bin" +DirectSoundWaveData_sc88pro_taiko:: + .incbin "sound/direct_sound_samples/sc88pro_taiko.bin" .align 2 DirectSoundWaveData_ethnic_flavours_kotsuzumi:: diff --git a/sound/direct_sound_samples/unknown_taiko.aif b/sound/direct_sound_samples/sc88pro_taiko.aif similarity index 100% rename from sound/direct_sound_samples/unknown_taiko.aif rename to sound/direct_sound_samples/sc88pro_taiko.aif diff --git a/sound/voicegroups/voicegroup003.inc b/sound/voicegroups/voicegroup003.inc index 2ba0592d5e..cef9cb5776 100644 --- a/sound/voicegroups/voicegroup003.inc +++ b/sound/voicegroups/voicegroup003.inc @@ -33,10 +33,10 @@ voicegroup003:: @ 86763D0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676538 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676544 voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 8676550 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 867655C + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 867655C voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 8676568 voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 8676574 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 8676580 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 8676580 voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 @ 867658C voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 @ 8676598 voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 @ 86765A4 @@ -50,7 +50,7 @@ voicegroup003:: @ 86763D0 voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 8676604 voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 8676610 voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 @ 867661C - voice_directsound 64, 104, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 235 @ 8676628 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 @ 8676628 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676634 voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 @ 8676640 voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 @ 867664C diff --git a/sound/voicegroups/voicegroup004.inc b/sound/voicegroups/voicegroup004.inc index c0c8e54d0a..367aafa155 100644 --- a/sound/voicegroups/voicegroup004.inc +++ b/sound/voicegroups/voicegroup004.inc @@ -33,7 +33,7 @@ voicegroup004:: @ 8676658 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86767C0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86767CC voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 86767D8 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 86767E4 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 86767E4 voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 86767F0 voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 86767FC voice_directsound 62, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 @ 8676808 @@ -50,7 +50,7 @@ voicegroup004:: @ 8676658 voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 867688C voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 8676898 voice_directsound 56, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 @ 86768A4 - voice_directsound 64, 104, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 235 @ 86768B0 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 @ 86768B0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86768BC voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 @ 86768C8 voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 @ 86768D4 @@ -87,7 +87,7 @@ voicegroup004:: @ 8676658 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676A48 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 8676A54 voice_directsound 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 8676A60 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 8676A6C + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 8676A6C voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 8676A78 voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 8676A84 diff --git a/sound/voicegroups/voicegroup129.inc b/sound/voicegroups/voicegroup129.inc index 224329a48b..3c3ce90c67 100644 --- a/sound/voicegroups/voicegroup129.inc +++ b/sound/voicegroups/voicegroup129.inc @@ -116,7 +116,7 @@ voicegroup129:: @ 86A0154 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06A0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06AC voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06B8 - voice_directsound 60, 0, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 86A06C4 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 86A06C4 voice_directsound 60, 0, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 @ 86A06D0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06DC voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86A06E8 diff --git a/sound/voicegroups/voicegroup177.inc b/sound/voicegroups/voicegroup177.inc index 266e28278d..6d43470b8a 100644 --- a/sound/voicegroups/voicegroup177.inc +++ b/sound/voicegroups/voicegroup177.inc @@ -87,7 +87,7 @@ voicegroup177:: @ 86B0378 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86B0768 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86B0774 voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 86B0780 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 86B078C + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 86B078C voice_directsound 50, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 86B0798 voice_directsound 64, 64, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 @ 86B07A4 diff --git a/sound/voicegroups/voicegroup190.inc b/sound/voicegroups/voicegroup190.inc index 02b185c938..9dc83deed2 100644 --- a/sound/voicegroups/voicegroup190.inc +++ b/sound/voicegroups/voicegroup190.inc @@ -87,4 +87,4 @@ voicegroup190:: @ 86B429C voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86B468C voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @ 86B4698 voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 @ 86B46A4 - voice_directsound 63, 64, DirectSoundWaveData_unknown_taiko, 255, 0, 255, 0 @ 86B46B0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 @ 86B46B0 diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c index 42cc9aea3a..f6ebcc7265 100644 --- a/src/AgbRfu_LinkManager.c +++ b/src/AgbRfu_LinkManager.c @@ -352,7 +352,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if (bm_linkLossSlot & (1 << i)) + if ((bm_linkLossSlot >> i) & 1) { lman.linkRecoveryTimer.active |= (1 << i); lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max; @@ -396,7 +396,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) bm_disconnectSlot = 0; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((lman.linkRecoveryTimer.active) & (1 << i) && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0) + if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0) { lman.linkRecoveryTimer.active &= ~(1 << i); bm_disconnectSlot |= (1 << i); diff --git a/src/agb_flash.c b/src/agb_flash.c index f63f84509e..6b9381c704 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -41,7 +41,7 @@ u16 ReadFlashId(void) u8 (*readFlash1)(u8 *); SetReadFlash1(readFlash1Buffer); - readFlash1 = (u8 (*)(u8 *))((uintptr_t)readFlash1Buffer + 1); + readFlash1 = (u8 (*)(u8 *))((s32)readFlash1Buffer + 1); // Enter ID mode. FLASH_WRITE(0x5555, 0xAA); @@ -113,12 +113,12 @@ void SetReadFlash1(u16 *dest) u16 *src; u16 i; - PollFlashStatus = (u8 (*)(u8 *))((uintptr_t)dest + 1); + PollFlashStatus = (u8 (*)(u8 *))((s32)dest + 1); src = (u16 *)ReadFlash1; - src = (u16 *)((uintptr_t)src ^ 1); + src = (u16 *)((s32)src ^ 1); - i = ((uintptr_t)SetReadFlash1 - (uintptr_t)ReadFlash1) >> 1; + i = ((s32)SetReadFlash1 - (s32)ReadFlash1) >> 1; while (i != 0) { @@ -154,10 +154,10 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) } funcSrc = (vu16 *)ReadFlash_Core; - funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); + funcSrc = (vu16 *)((s32)funcSrc ^ 1); funcDest = readFlash_Core_Buffer; - i = ((uintptr_t)ReadFlash - (uintptr_t)ReadFlash_Core) >> 1; + i = ((s32)ReadFlash - (s32)ReadFlash_Core) >> 1; while (i != 0) { @@ -165,7 +165,7 @@ void ReadFlash(u16 sectorNum, u32 offset, u8 *dest, u32 size) i--; } - readFlash_Core = (void (*)(vu8 *, u8 *, u32))((uintptr_t)readFlash_Core_Buffer + 1); + readFlash_Core = (void (*)(vu8 *, u8 *, u32))((s32)readFlash_Core_Buffer + 1); src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; @@ -202,10 +202,10 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src) } funcSrc = (vu16 *)VerifyFlashSector_Core; - funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); + funcSrc = (vu16 *)((s32)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = (u16)(((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1); + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; while (i != 0) { @@ -213,7 +213,7 @@ u32 VerifyFlashSector(u16 sectorNum, u8 *src) i--; } - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); size = gFlash->sector.size; @@ -239,10 +239,10 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; funcSrc = (vu16 *)VerifyFlashSector_Core; - funcSrc = (vu16 *)((uintptr_t)funcSrc ^ 1); + funcSrc = (vu16 *)((s32)funcSrc ^ 1); funcDest = verifyFlashSector_Core_Buffer; - i = ((uintptr_t)VerifyFlashSector - (uintptr_t)VerifyFlashSector_Core) >> 1; + i = ((s32)VerifyFlashSector - (s32)VerifyFlashSector_Core) >> 1; while (i != 0) { @@ -250,7 +250,7 @@ u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) i--; } - verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((uintptr_t)verifyFlashSector_Core_Buffer + 1); + verifyFlashSector_Core = (u32 (*)(u8 *, u8 *, u32))((s32)verifyFlashSector_Core_Buffer + 1); tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); diff --git a/src/apprentice.c b/src/apprentice.c index 3dc33cad49..ad157f301e 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -27,7 +27,6 @@ #include "constants/items.h" #include "constants/pokemon.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/moves.h" diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 032e5f407f..b7679429cf 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -14,7 +14,6 @@ #include "constants/battle_ai.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" -#include "constants/species.h" #define AI_ACTION_DONE 0x0001 #define AI_ACTION_FLEE 0x0002 @@ -451,7 +450,16 @@ static u8 ChooseMoveOrAction_Doubles(void) { s32 i; s32 j; +#ifndef BUGFIX s32 scriptsToRun; +#else + // the value assigned to this is a u32 (aiFlags) + // this becomes relevant because aiFlags can have bit 31 set + // and scriptsToRun is shifted + // this never happens in the vanilla game because bit 31 is + // only set when it's the first battle + u32 scriptsToRun; +#endif s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT]; s8 mostViableTargetsArray[MAX_BATTLERS_COUNT]; u8 actionOrMoveIndex[MAX_BATTLERS_COUNT]; @@ -616,8 +624,8 @@ static void RecordLastUsedMoveByTarget(void) { if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == gLastMoves[gBattlerTarget]) break; - if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] != gLastMoves[gBattlerTarget] // HACK: This redundant condition is a hack to make the asm match. - && BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == MOVE_NONE) + + if (BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] == MOVE_NONE) { BATTLE_HISTORY->usedMoves[gBattlerTarget].moves[i] = gLastMoves[gBattlerTarget]; break; @@ -1299,7 +1307,7 @@ static void Cmd_count_usable_party_mons(void) if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - u8 position; + u32 position; battlerOnField1 = gBattlerPartyIndexes[battlerId]; position = GetBattlerPosition(battlerId) ^ BIT_FLANK; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)]; @@ -1605,8 +1613,10 @@ static void Cmd_if_status_not_in_party(void) if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo) { - gAIScriptPtr += 10; // UB: Still bugged in Emerald. Uncomment the return statement to fix. - // return; + gAIScriptPtr += 10; + #ifdef UBFIX + return; + #endif } } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 2a5a83e0d7..1663c25616 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -9,7 +9,6 @@ #include "constants/item_effects.h" #include "constants/items.h" #include "constants/moves.h" -#include "constants/species.h" // this file's functions static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng); diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index 5e8a8b2a76..b8aba89764 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -372,11 +372,14 @@ static void AnimTranslateStinger(struct Sprite *sprite) { gBattleAnimArgs[2] = -gBattleAnimArgs[2]; } - else if (GetBattlerSide(gBattleAnimAttacker)) + else { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + if (GetBattlerSide(gBattleAnimAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } } if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) @@ -440,24 +443,28 @@ static void AnimMissileArc_Step(struct Sprite *sprite) else { s16 tempData[8]; - s16 xpos, ypos; + u16 *data = sprite->data; + u16 x1 = sprite->pos1.x; + s16 x2 = sprite->pos2.x; + u16 y1 = sprite->pos1.y; + s16 y2 = sprite->pos2.y; int i; for (i = 0; i < 8; i++) - tempData[i] = sprite->data[i]; + tempData[i] = data[i]; - xpos = sprite->pos1.x + sprite->pos2.x; - ypos = sprite->pos1.y + sprite->pos2.y; + x2 += x1; + y2 += y1; if (!TranslateAnimHorizontalArc(sprite)) { - u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - xpos, //Isn't this zero lol - sprite->pos1.y + sprite->pos2.y - ypos); + u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2, + sprite->pos1.y + sprite->pos2.y - y2); rotation += 0xC000; TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); for (i = 0; i < 8; i++) - sprite->data[i] = tempData[i]; + data[i] = tempData[i]; } } } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index c8d43e12e0..04bab2f851 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3967,25 +3967,24 @@ static void AnimProtect(struct Sprite* sprite) static void AnimProtect_Step(struct Sprite *sprite) { - int i, savedPal; + int i, id, savedPal; sprite->data[5] += 96; sprite->pos2.x = -(sprite->data[5] >> 8); if (++sprite->data[1] > 1) { - int id; sprite->data[1] = 0; savedPal = gPlttBufferFaded[sprite->data[2] + 1]; i = 0; - do + while (i < 6) { id = sprite->data[2] + ++i; gPlttBufferFaded[id] = gPlttBufferFaded[id + 1]; - } while (i < 6); + } gPlttBufferFaded[sprite->data[2] + 7] = savedPal; } - if (sprite->data[7] > 6 && sprite->data[0] > 0 && ++sprite->data[6] > 1) + if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1) { sprite->data[6] = 0; sprite->data[7] -= 1; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 58d3351975..9e50a8477e 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -21,7 +21,6 @@ #include "constants/battle_anim.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/weather.h" extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate; @@ -2291,7 +2290,7 @@ void AnimTask_TransformMon(u8 taskId) else position = GetBattlerPosition(gBattleAnimAttacker); - src = gMonSpritesGfxPtr->sprites[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); + src = gMonSpritesGfxPtr->sprites.ptr[position] + (gBattleMonForms[gBattleAnimAttacker] << 11); dest = animBg.bgTiles; CpuCopy32(src, dest, 0x800); LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset); @@ -5003,8 +5002,8 @@ void AnimTask_GetReturnPowerLevel(u8 taskId) void AnimTask_SnatchOpposingMonMove(u8 taskId) { u8 spriteId, spriteId2; - u32 personality; - u32 otId; + int personality; + int otId; u16 species; u8 subpriority; bool8 isBackPic; @@ -5038,31 +5037,34 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) isBackPic = FALSE; x = -32; } - else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) - { - personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); - otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); - if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - else - species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; - - subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; - isBackPic = FALSE; - x = 272; - } else { - personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); - otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); - if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); - else - species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); + if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; - subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; - isBackPic = TRUE; - x = -32; + subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority + 1; + isBackPic = FALSE; + x = 272; + } + else + { + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_OT_ID); + if (gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies == SPECIES_NONE) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies; + + subpriority = gSprites[GetAnimBattlerSpriteId(ANIM_TARGET)].subpriority - 1; + isBackPic = TRUE; + x = -32; + } } spriteId2 = sub_80A8394(species, isBackPic, 0, x, GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y), subpriority, personality, otId, gBattleAnimAttacker, 0); @@ -5089,7 +5091,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) if (x < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X)) { gTasks[taskId].data[14]++; - gBattleAnimArgs[7] = -1; + gBattleAnimArgs[7] = 0xFFFF; } } else @@ -5097,7 +5099,7 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId) if (x > GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X)) { gTasks[taskId].data[14]++; - gBattleAnimArgs[7] = -1; + gBattleAnimArgs[7] = 0xFFFF; } } } diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index fe94dc9a21..f8d47f4ec0 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -380,18 +380,21 @@ static void AnimTask_AnimateGustTornadoPalette_Step(u8 taskId) { u8 data2; u16 temp; + int i, base; if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1]) { - int i, base; gTasks[taskId].data[10] = 0; data2 = gTasks[taskId].data[2]; temp = gPlttBufferFaded[16 * data2 + 0x108]; i = 7; base = data2 * 16; - for (; i > 0; --i) + do + { gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; + i--; + } while (i > 0); gPlttBufferFaded[base + 0x101] = temp; } @@ -533,16 +536,17 @@ static void AnimFlyBallAttack_Step(struct Sprite *sprite) void DestroyAnimSpriteAfterTimer(struct Sprite *sprite) { - if (sprite->data[0]-- > 0) - return; - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + if (sprite->data[0]-- <= 0) { - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = ST_OAM_AFFINE_OFF; - } + if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + } - DestroySprite(sprite); - gAnimVisualTaskCount--; + DestroySprite(sprite); + gAnimVisualTaskCount--; + } } struct FeatherDanceData @@ -563,41 +567,35 @@ struct FeatherDanceData u16 unkE_1:15; }; -#define ANIM_SWITCH(sprite) \ - { \ - (sprite)->hFlip ^= 1; \ - (sprite)->animNum = (sprite)->hFlip; \ - (sprite)->animBeginning = TRUE; \ - (sprite)->animEnded = FALSE; \ - } - static void AnimFallingFeather(struct Sprite *sprite) { - u8 battler, sinIndex; - u32 matrixNum; - s16 sinVal; + u8 battler, matrixNum, sinIndex; + s16 spriteCoord; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; - battler = (gBattleAnimArgs[7] & 0x100) ? gBattleAnimAttacker : gBattleAnimTarget; + if (gBattleAnimArgs[7] & 0x100) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; if (GetBattlerSide(battler) == B_SIDE_PLAYER) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0]; - sinVal = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH); - sprite->pos1.y = sinVal + gBattleAnimArgs[1]; + spriteCoord = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH); + sprite->pos1.y = spriteCoord + gBattleAnimArgs[1]; - data->unk8 = (u16)(sprite->pos1.y) << 8; - data->unkE_1 = (u16)(sinVal + gBattleAnimArgs[6]); + data->unk8 = sprite->pos1.y << 8; + data->unkE_1 = spriteCoord + gBattleAnimArgs[6]; data->unk0_0c = 1; - data->unk2 = (u16)(gBattleAnimArgs[2] & 0xFF); - data->unkA = (u16)gBattleAnimArgs[2] >> 8; + data->unk2 = gBattleAnimArgs[2] & 0xFF; + data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF; data->unk4 = gBattleAnimArgs[3]; - data->unk6 = (u16)gBattleAnimArgs[4]; - *(u16 *)(data->unkC) = (u16)gBattleAnimArgs[5]; + data->unk6 = gBattleAnimArgs[4]; + *(u16*)(data->unkC) = gBattleAnimArgs[5]; - if (data->unk2 >= 64 && data->unk2 < 192) + if (data->unk2 >= 64 && data->unk2 <= 191) { if (!IsContest()) sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; @@ -608,7 +606,11 @@ static void AnimFallingFeather(struct Sprite *sprite) if (!(data->unk4 & 0x8000)) { - ANIM_SWITCH(sprite); + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + + sprite->animBeginning = 1; + sprite->animEnded = 0; } } else @@ -618,28 +620,31 @@ static void AnimFallingFeather(struct Sprite *sprite) if (data->unk4 & 0x8000) { - ANIM_SWITCH(sprite); + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + + sprite->animBeginning = 1; + sprite->animEnded = 0; } } - data->unk0_1 = data->unk2 / 64; - sprite->pos2.x = (gSineTable[data->unk2] * (s32)data->unkC[0]) >> 8; + data->unk0_1 = data->unk2 >> 6; + sprite->pos2.x = (gSineTable[data->unk2] * data->unkC[0]) >> 8; matrixNum = sprite->oam.matrixNum; sinIndex = (-sprite->pos2.x >> 1) + data->unkA; - sinVal = gSineTable[sinIndex]; + spriteCoord = gSineTable[sinIndex]; gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; + gOamMatrices[matrixNum].b = spriteCoord; + gOamMatrices[matrixNum].c = -spriteCoord; sprite->callback = sub_810E520; } static void sub_810E520(struct Sprite *sprite) { - u8 sinIndex; - u32 matrixNum; + u8 matrixNum, sinIndex; s16 sinVal = 0; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; if (data->unk0_0a) @@ -649,226 +654,240 @@ static void sub_810E520(struct Sprite *sprite) data->unk0_0a = 0; data->unk1 = 0; } - return; } - - switch (data->unk2 / 64) - { - case 0: - if ((u8)data->unk0_1 == 1) // this must be cast to u8 - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if ((u8)data->unk0_1 == 3) - { - data->unk0_0b ^= 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - ANIM_SWITCH(sprite); - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 0; - break; - case 1: - if ((u8)data->unk0_1 == 0) - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if ((u8)data->unk0_1 == 2) - { - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - ANIM_SWITCH(sprite); - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 1; - break; - case 2: - if ((u8)data->unk0_1 == 3) - { - data->unk0_0d = 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if ((u8)data->unk0_1 == 1) - { - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - ANIM_SWITCH(sprite); - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 2; - break; - case 3: - if ((u8)data->unk0_1 == 2) - { - data->unk0_0d = 1; - } - else if ((u8)data->unk0_1 == 0) - { - data->unk0_0b ^= 1; - data->unk0_0a = 1; - data->unk1 = 0; - } - else if (data->unk0_0d) - { - ANIM_SWITCH(sprite); - if (data->unk0_0c) - { - if (!IsContest()) - { - if (!data->unkE_0) - { - sprite->oam.priority--; - data->unkE_0 ^= 1; - } - else - { - sprite->oam.priority++; - data->unkE_0 ^= 1; - } - } - else - { - if (!data->unkE_0) - { - sprite->subpriority -= 12; - data->unkE_0 ^= 1; - } - else - { - sprite->subpriority += 12; - data->unkE_0 ^= 1; - } - } - } - data->unk0_0d = 0; - } - data->unk0_1 = 3; - break; - } - - sprite->pos2.x = ((s32)(data->unkC[data->unk0_0b]) * gSineTable[data->unk2]) >> 8; - matrixNum = sprite->oam.matrixNum; - - sinIndex = ((-sprite->pos2.x >> 1) + data->unkA); - sinVal = gSineTable[sinIndex]; - - gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; - gOamMatrices[matrixNum].b = sinVal; - gOamMatrices[matrixNum].c = -sinVal; - - data->unk8 += data->unk6; - sprite->pos1.y = (s16)(data->unk8 >> 8); - if (data->unk4 & 0x8000) - data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF; else - data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF; - - if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1) { - sprite->data[0] = 0; - sprite->callback = DestroyAnimSpriteAfterTimer; + switch (data->unk2 / 64) + { + case 0: + if ((u8)data->unk0_1 == 1) //casts to u8 here are necessary for matching + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if ((u8)data->unk0_1 == 3) + { + data->unk0_0b ^= 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + data->unk2; + } + data->unk0_1 = 0; + break; + case 1: + if ((u8)data->unk0_1 == 0) + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if ((u8)data->unk0_1 == 2) + { + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 1; + break; + case 2: + if ((u8)data->unk0_1 == 3) + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if ((u8)data->unk0_1 == 1) + { + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 2; + break; + case 3: + if ((u8)data->unk0_1 == 2) + { + data->unk0_0d = 1; + } + else if ((u8)data->unk0_1 == 0) + { + data->unk0_0b ^= 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + sprite->oam.priority--; + data->unkE_0 ^= 1; + } + else + { + sprite->oam.priority++; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 3; + break; + } + + sprite->pos2.x = ((s32)data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8; + matrixNum = sprite->oam.matrixNum; + + sinIndex = (-sprite->pos2.x >> 1) + data->unkA; + sinVal = gSineTable[sinIndex]; + + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + + data->unk8 += data->unk6; + sprite->pos1.y = data->unk8 >> 8; + if (data->unk4 & 0x8000) + data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF; + else + data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF; + + if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1) + { + sprite->data[0] = 0; + sprite->callback = DestroyAnimSpriteAfterTimer; + } } } @@ -912,20 +931,20 @@ static void sub_810EB40(struct Sprite *sprite) { sprite->pos2.x += sprite->data[1] >> 8; - if (sprite->data[0]++ == 5) + if (++sprite->data[0] == 6) { sprite->data[0] = 0; sprite->pos2.x = 0; StartSpriteAnim(sprite, 0); } - if (sprite->data[7]-- == 0) + if (--sprite->data[7] == -1) DestroyAnimSprite(sprite); } void AnimTask_DrillPeckHitSplats(u8 task) { - if ((gTasks[task].data[0] % 32) == 0) + if (!(gTasks[task].data[0] % 32)) { gAnimVisualTaskCount++; @@ -1028,8 +1047,8 @@ static void AnimDiveBall_Step2(struct Sprite *sprite) static void AnimDiveWaterSplash(struct Sprite *sprite) { - u8 matrixNum; - s32 t1, t2; + u32 matrixNum; + int t1, t2; switch (sprite->data[0]) { @@ -1051,7 +1070,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) sprite->data[0]++; break; case 1: - if (sprite->data[2] < 12) + if (sprite->data[2] <= 11) sprite->data[1] -= 40; else sprite->data[1] += 40; @@ -1059,7 +1078,7 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) sprite->data[2]++; TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0); - + matrixNum = sprite->oam.matrixNum; t1 = 15616; @@ -1083,8 +1102,8 @@ static void AnimDiveWaterSplash(struct Sprite *sprite) // Launches a water droplet away from the specified battler. Used by Astonish and Dive static void AnimSprayWaterDroplet(struct Sprite *sprite) { - const u16 v1 = Random2() & 0x1ff; - const u16 v2 = Random2() & 0x07f; + int v1 = 0x1ff & Random2(); + int v2 = 0x7f & Random2(); if (v1 % 2) sprite->data[0] = 736 + v1; @@ -1128,13 +1147,13 @@ static void AnimSprayWaterDroplet_Step(struct Sprite *sprite) sprite->pos2.y -= sprite->data[1] >> 8; } - sprite->data[0] -= 0; // Needed to Match + sprite->data[0] = sprite->data[0]; sprite->data[1] -= 32; if (sprite->data[0] < 0) sprite->data[0] = 0; - if (sprite->data[3]++ == 30) + if (++sprite->data[3] == 31) DestroyAnimSprite(sprite); } @@ -1204,12 +1223,12 @@ void unref_sub_810F184(u8 taskId) { if (gBattleAnimArgs[0] == 0) { - const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = TRUE; } else { - const u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); gSprites[spriteId].invisible = FALSE; } DestroyAnimVisualTask(taskId); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index d9993ab953..d626e16041 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -15,7 +15,6 @@ #include "trig.h" #include "util.h" #include "constants/battle_anim.h" -#include "constants/species.h" #define GET_UNOWN_LETTER(personality) (( \ (((personality & 0x03000000) >> 24) << 6) \ diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index 71c81235af..eed1638166 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -5,7 +5,6 @@ #include "sound.h" #include "task.h" #include "constants/battle_anim.h" -#include "constants/species.h" // this file's functions static void sub_8158B98(u8 taskId); diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 12f37dbba2..2bb90e5850 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -52,7 +52,7 @@ static void CreateWaterSpoutLaunchDroplets(struct Task*, u8); static void CreateWaterSpoutRainDroplet(struct Task*, u8); static void AnimTask_WaterSport_Step(u8); static void CreateWaterSportDroplet(struct Task*); -static void CreateWaterPulseRingBubbles(struct Sprite*, s32, s32); +static void CreateWaterPulseRingBubbles(struct Sprite*, int, int); // Both unused const u8 gUnknown_8593C80[] = INCBIN_U8("graphics/unknown/unknown_593C80.4bpp"); @@ -631,13 +631,13 @@ static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) if (++gTasks[taskId].data[10] == 3) { - u16 tempPlt; + u16 rgbBuffer; gTasks[taskId].data[10] = 0; palIndex = gTasks[taskId].data[2] + 1; - tempPlt = gPlttBufferFaded[palIndex]; + rgbBuffer = gPlttBufferFaded[palIndex]; for (i = 1; i < 8; i++) gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i]; - gPlttBufferFaded[palIndex + 7] = tempPlt; + gPlttBufferFaded[palIndex + 7] = rgbBuffer; } if (++gTasks[taskId].data[11] == gTasks[taskId].data[0]) DestroyAnimVisualTask(taskId); @@ -748,7 +748,6 @@ static void AnimHydroCannonBeam(struct Sprite *sprite) if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT) gBattleAnimArgs[0] *= -1; } - if ((gBattleAnimArgs[5] & 0xFF00) == 0) animType = TRUE; else @@ -794,7 +793,7 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite) sprite->pos2.x = Sin(sprite->data[0], 4); sprite->data[1] += 48; sprite->pos2.y = -(sprite->data[1] >> 8); - if (sprite->data[7]-- == 0) + if (--sprite->data[7] == -1) DestroyAnimSprite(sprite); } @@ -802,17 +801,17 @@ void AnimTask_CreateSurfWave(u8 taskId) { struct BattleAnimBgData animBg; u8 taskId2; - u16 *x, *y; //These pointers are needed to match + u16 *x; + u16 *y; x = &gBattle_BG1_X; y = &gBattle_BG1_Y; - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1); - SetGpuReg(REG_OFFSET_BLDALPHA, (16 << 8)); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1); sub_80A6B30(&animBg); - if (!IsContest()) { SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); @@ -877,13 +876,13 @@ void AnimTask_CreateSurfWave(u8 taskId) static void AnimTask_CreateSurfWave_Step1(u8 taskId) { - u16 rgbBuffer; - u8 i; - u16 *BGptrX, *BGptrY; struct BattleAnimBgData animBg; - - BGptrX = &gBattle_BG1_X; - BGptrY = &gBattle_BG1_Y; + u8 i; + u16 rgbBuffer; + u16 *BGptrX = &gBattle_BG1_X; + u16 *BGptrY = &gBattle_BG1_Y; + u32 palOffset; + u16 palNum; *BGptrX += gTasks[taskId].data[0]; *BGptrY += gTasks[taskId].data[1]; @@ -891,18 +890,18 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) gTasks[taskId].data[2] += gTasks[taskId].data[1]; if (++gTasks[taskId].data[5] == 4) { - rgbBuffer = gPlttBufferFaded[16 * animBg.paletteId + 7]; - for (i = 6; i != 0; i--) // i > 0 generates the exact same code in this context + rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7]; + for (i = 6; i != 0; i--) { - gPlttBufferFaded[16 * animBg.paletteId + 1 + i] = gPlttBufferFaded[16 * animBg.paletteId + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason + gPlttBufferFaded[animBg.paletteId * 16 + 1 + i] = gPlttBufferFaded[animBg.paletteId * 16 + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason } - gPlttBufferFaded[16 * animBg.paletteId + 1] = rgbBuffer; + gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer; gTasks[taskId].data[5] = 0; } if (++gTasks[taskId].data[6] > 1) { gTasks[taskId].data[6] = 0; - if (++gTasks[taskId].data[3] < 14) + if (++gTasks[taskId].data[3] <= 13) { gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8)); gTasks[taskId].data[4]++; @@ -920,7 +919,6 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) } } - static void AnimTask_CreateSurfWave_Step2(u8 taskId) { u16 *BGptrX = &gBattle_BG1_X; @@ -1543,50 +1541,45 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite) sprite->data[0]++; } -static void CreateWaterPulseRingBubbles(struct Sprite *sprite, s32 xDiff, s32 yDiff) +static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) { - s16 combinedX, combinedY; - s16 i, something; + s16 combinedX; + s16 combinedY; + s16 i; + s16 something; s16 unusedVar = 1; //unusedVar is needed to match - s16 somethingRandomX, somethingRandomY; + s16 randomSomethingY; + s16 randomSomethingX; u8 spriteId; - + something = sprite->data[0] / 2; combinedX = sprite->pos1.x + sprite->pos2.x; combinedY = sprite->pos1.y + sprite->pos2.y; if (yDiff < 0) - unusedVar *= -1; //Needed to Match - somethingRandomY = yDiff + (Random2() % 10) - 5; - somethingRandomX = -xDiff + (Random2() % 10) - 5; + unusedVar *= -1; //Needed to match + randomSomethingY = yDiff + (Random2() % 10) - 5; + randomSomethingX = -xDiff + (Random2() % 10) - 5; - for (i = 0; i < 1; i++) + for (i = 0; i <= 0; i++) { spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130); gSprites[spriteId].data[0] = 20; - gSprites[spriteId].data[1] = somethingRandomY; + gSprites[spriteId].data[1] = randomSomethingY; gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; - if (somethingRandomX < 0) - { - gSprites[spriteId].data[2] = -somethingRandomX; - } + if (randomSomethingX < 0) + gSprites[spriteId].data[2] = -randomSomethingX; else - { - gSprites[spriteId].data[2] = somethingRandomX; - } + gSprites[spriteId].data[2] = randomSomethingX; } - for (i = 0; i < 1; i++) + for (i = 0; i <= 0; i++) { spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130); gSprites[spriteId].data[0] = 20; - gSprites[spriteId].data[1] = somethingRandomY; + gSprites[spriteId].data[1] = randomSomethingY; gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; - if (somethingRandomX > 0) - { - gSprites[spriteId].data[2] = -somethingRandomX; - } + if (randomSomethingX > 0) + gSprites[spriteId].data[2] = -randomSomethingX; else - { - gSprites[spriteId].data[2] = somethingRandomX; - } + gSprites[spriteId].data[2] = randomSomethingX; } } diff --git a/src/battle_bg.c b/src/battle_bg.c index 6a0e4c10cf..7c9b05b25c 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -1126,7 +1126,7 @@ void DrawBattleEntryBackground(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK) { LZDecompressVram(gUnknown_08D778F0, (void*)(BG_CHAR_ADDR(1))); - LZDecompressVram(gVsLettersGfx, (void*)(OBJ_VRAM0)); + LZDecompressVram(gVsLettersGfx, (void*)(VRAM + 0x10000)); LoadCompressedPalette(gUnknown_08D77AE4, 0x60, 0x20); SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1); SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04); diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 1041f6fda0..269b4c1b4a 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -69,10 +69,10 @@ static void LinkOpponentHandleTwoReturnValues(void); static void LinkOpponentHandleChosenMonReturnValue(void); static void LinkOpponentHandleOneReturnValue(void); static void LinkOpponentHandleOneReturnValue_Duplicate(void); -static void LinkOpponentHandleCmd37(void); -static void LinkOpponentHandleCmd38(void); -static void LinkOpponentHandleCmd39(void); -static void LinkOpponentHandleCmd40(void); +static void LinkOpponentHandleClearUnkVar(void); +static void LinkOpponentHandleSetUnkVar(void); +static void LinkOpponentHandleClearUnkFlag(void); +static void LinkOpponentHandleToggleUnkFlag(void); static void LinkOpponentHandleHitAnimation(void); static void LinkOpponentHandleCmd42(void); static void LinkOpponentHandlePlaySE(void); @@ -104,63 +104,63 @@ static void sub_806782C(void); static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - LinkOpponentHandleGetMonData, - LinkOpponentHandleGetRawMonData, - LinkOpponentHandleSetMonData, - LinkOpponentHandleSetRawMonData, - LinkOpponentHandleLoadMonSprite, - LinkOpponentHandleSwitchInAnim, - LinkOpponentHandleReturnMonToBall, - LinkOpponentHandleDrawTrainerPic, - LinkOpponentHandleTrainerSlide, - LinkOpponentHandleTrainerSlideBack, - LinkOpponentHandleFaintAnimation, - LinkOpponentHandlePaletteFade, - LinkOpponentHandleSuccessBallThrowAnim, - LinkOpponentHandleBallThrowAnim, - LinkOpponentHandlePause, - LinkOpponentHandleMoveAnimation, - LinkOpponentHandlePrintString, - LinkOpponentHandlePrintSelectionString, - LinkOpponentHandleChooseAction, - LinkOpponentHandleUnknownYesNoBox, - LinkOpponentHandleChooseMove, - LinkOpponentHandleChooseItem, - LinkOpponentHandleChoosePokemon, - LinkOpponentHandleCmd23, - LinkOpponentHandleHealthBarUpdate, - LinkOpponentHandleExpUpdate, - LinkOpponentHandleStatusIconUpdate, - LinkOpponentHandleStatusAnimation, - LinkOpponentHandleStatusXor, - LinkOpponentHandleDataTransfer, - LinkOpponentHandleDMA3Transfer, - LinkOpponentHandlePlayBGM, - LinkOpponentHandleCmd32, - LinkOpponentHandleTwoReturnValues, - LinkOpponentHandleChosenMonReturnValue, - LinkOpponentHandleOneReturnValue, - LinkOpponentHandleOneReturnValue_Duplicate, - LinkOpponentHandleCmd37, - LinkOpponentHandleCmd38, - LinkOpponentHandleCmd39, - LinkOpponentHandleCmd40, - LinkOpponentHandleHitAnimation, - LinkOpponentHandleCmd42, - LinkOpponentHandlePlaySE, - LinkOpponentHandlePlayFanfareOrBGM, - LinkOpponentHandleFaintingCry, - LinkOpponentHandleIntroSlide, - LinkOpponentHandleIntroTrainerBallThrow, - LinkOpponentHandleDrawPartyStatusSummary, - LinkOpponentHandleHidePartyStatusSummary, - LinkOpponentHandleEndBounceEffect, - LinkOpponentHandleSpriteInvisibility, - LinkOpponentHandleBattleAnimation, - LinkOpponentHandleLinkStandbyMsg, - LinkOpponentHandleResetActionMoveSelection, - LinkOpponentHandleCmd55, - LinkOpponentCmdEnd + [CONTROLLER_GETMONDATA] = LinkOpponentHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = LinkOpponentHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = LinkOpponentHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = LinkOpponentHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = LinkOpponentHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = LinkOpponentHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = LinkOpponentHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = LinkOpponentHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = LinkOpponentHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = LinkOpponentHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = LinkOpponentHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = LinkOpponentHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkOpponentHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = LinkOpponentHandleBallThrowAnim, + [CONTROLLER_PAUSE] = LinkOpponentHandlePause, + [CONTROLLER_MOVEANIMATION] = LinkOpponentHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = LinkOpponentHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkOpponentHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = LinkOpponentHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = LinkOpponentHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = LinkOpponentHandleChooseMove, + [CONTROLLER_OPENBAG] = LinkOpponentHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = LinkOpponentHandleChoosePokemon, + [CONTROLLER_23] = LinkOpponentHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = LinkOpponentHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = LinkOpponentHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = LinkOpponentHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = LinkOpponentHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = LinkOpponentHandleStatusXor, + [CONTROLLER_DATATRANSFER] = LinkOpponentHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = LinkOpponentHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = LinkOpponentHandlePlayBGM, + [CONTROLLER_32] = LinkOpponentHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = LinkOpponentHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = LinkOpponentHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = LinkOpponentHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkOpponentHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = LinkOpponentHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = LinkOpponentHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = LinkOpponentHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = LinkOpponentHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = LinkOpponentHandleHitAnimation, + [CONTROLLER_42] = LinkOpponentHandleCmd42, + [CONTROLLER_PLAYSE] = LinkOpponentHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = LinkOpponentHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = LinkOpponentHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = LinkOpponentHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = LinkOpponentHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkOpponentHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkOpponentHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = LinkOpponentHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = LinkOpponentHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = LinkOpponentHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = LinkOpponentHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = LinkOpponentHandleResetActionMoveSelection, + [CONTROLLER_55] = LinkOpponentHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = LinkOpponentCmdEnd }; static void nullsub_28(void) @@ -1604,27 +1604,27 @@ static void LinkOpponentHandleOneReturnValue_Duplicate(void) LinkOpponentBufferExecCompleted(); } -static void LinkOpponentHandleCmd37(void) +static void LinkOpponentHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; LinkOpponentBufferExecCompleted(); } -static void LinkOpponentHandleCmd38(void) +static void LinkOpponentHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; LinkOpponentBufferExecCompleted(); } -static void LinkOpponentHandleCmd39(void) +static void LinkOpponentHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; LinkOpponentBufferExecCompleted(); } -static void LinkOpponentHandleCmd40(void) +static void LinkOpponentHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; LinkOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index af81b06d5b..d3037bb905 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -67,10 +67,10 @@ static void LinkPartnerHandleTwoReturnValues(void); static void LinkPartnerHandleChosenMonReturnValue(void); static void LinkPartnerHandleOneReturnValue(void); static void LinkPartnerHandleOneReturnValue_Duplicate(void); -static void LinkPartnerHandleCmd37(void); -static void LinkPartnerHandleCmd38(void); -static void LinkPartnerHandleCmd39(void); -static void LinkPartnerHandleCmd40(void); +static void LinkPartnerHandleClearUnkVar(void); +static void LinkPartnerHandleSetUnkVar(void); +static void LinkPartnerHandleClearUnkFlag(void); +static void LinkPartnerHandleToggleUnkFlag(void); static void LinkPartnerHandleHitAnimation(void); static void LinkPartnerHandleCmd42(void); static void LinkPartnerHandlePlaySE(void); @@ -101,63 +101,63 @@ static void sub_814DE9C(void); static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - LinkPartnerHandleGetMonData, - LinkPartnerHandleGetRawMonData, - LinkPartnerHandleSetMonData, - LinkPartnerHandleSetRawMonData, - LinkPartnerHandleLoadMonSprite, - LinkPartnerHandleSwitchInAnim, - LinkPartnerHandleReturnMonToBall, - LinkPartnerHandleDrawTrainerPic, - LinkPartnerHandleTrainerSlide, - LinkPartnerHandleTrainerSlideBack, - LinkPartnerHandleFaintAnimation, - LinkPartnerHandlePaletteFade, - LinkPartnerHandleSuccessBallThrowAnim, - LinkPartnerHandleBallThrowAnim, - LinkPartnerHandlePause, - LinkPartnerHandleMoveAnimation, - LinkPartnerHandlePrintString, - LinkPartnerHandlePrintSelectionString, - LinkPartnerHandleChooseAction, - LinkPartnerHandleUnknownYesNoBox, - LinkPartnerHandleChooseMove, - LinkPartnerHandleChooseItem, - LinkPartnerHandleChoosePokemon, - LinkPartnerHandleCmd23, - LinkPartnerHandleHealthBarUpdate, - LinkPartnerHandleExpUpdate, - LinkPartnerHandleStatusIconUpdate, - LinkPartnerHandleStatusAnimation, - LinkPartnerHandleStatusXor, - LinkPartnerHandleDataTransfer, - LinkPartnerHandleDMA3Transfer, - LinkPartnerHandlePlayBGM, - LinkPartnerHandleCmd32, - LinkPartnerHandleTwoReturnValues, - LinkPartnerHandleChosenMonReturnValue, - LinkPartnerHandleOneReturnValue, - LinkPartnerHandleOneReturnValue_Duplicate, - LinkPartnerHandleCmd37, - LinkPartnerHandleCmd38, - LinkPartnerHandleCmd39, - LinkPartnerHandleCmd40, - LinkPartnerHandleHitAnimation, - LinkPartnerHandleCmd42, - LinkPartnerHandlePlaySE, - LinkPartnerHandlePlayFanfareOrBGM, - LinkPartnerHandleFaintingCry, - LinkPartnerHandleIntroSlide, - LinkPartnerHandleIntroTrainerBallThrow, - LinkPartnerHandleDrawPartyStatusSummary, - LinkPartnerHandleHidePartyStatusSummary, - LinkPartnerHandleEndBounceEffect, - LinkPartnerHandleSpriteInvisibility, - LinkPartnerHandleBattleAnimation, - LinkPartnerHandleLinkStandbyMsg, - LinkPartnerHandleResetActionMoveSelection, - LinkPartnerHandleCmd55, - LinkPartnerCmdEnd + [CONTROLLER_GETMONDATA] = LinkPartnerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = LinkPartnerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = LinkPartnerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = LinkPartnerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = LinkPartnerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = LinkPartnerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = LinkPartnerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = LinkPartnerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = LinkPartnerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = LinkPartnerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = LinkPartnerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = LinkPartnerHandlePause, + [CONTROLLER_MOVEANIMATION] = LinkPartnerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = LinkPartnerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = LinkPartnerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = LinkPartnerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = LinkPartnerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = LinkPartnerHandleChooseMove, + [CONTROLLER_OPENBAG] = LinkPartnerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = LinkPartnerHandleChoosePokemon, + [CONTROLLER_23] = LinkPartnerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = LinkPartnerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = LinkPartnerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = LinkPartnerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = LinkPartnerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = LinkPartnerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = LinkPartnerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = LinkPartnerHandlePlayBGM, + [CONTROLLER_32] = LinkPartnerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = LinkPartnerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = LinkPartnerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = LinkPartnerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = LinkPartnerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = LinkPartnerHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = LinkPartnerHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = LinkPartnerHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = LinkPartnerHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = LinkPartnerHandleHitAnimation, + [CONTROLLER_42] = LinkPartnerHandleCmd42, + [CONTROLLER_PLAYSE] = LinkPartnerHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = LinkPartnerHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = LinkPartnerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = LinkPartnerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = LinkPartnerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkPartnerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = LinkPartnerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = LinkPartnerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = LinkPartnerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = LinkPartnerHandleResetActionMoveSelection, + [CONTROLLER_55] = LinkPartnerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = LinkPartnerCmdEnd }; static void SpriteCB_Null2(void) @@ -1428,27 +1428,27 @@ static void LinkPartnerHandleOneReturnValue_Duplicate(void) LinkPartnerBufferExecCompleted(); } -static void LinkPartnerHandleCmd37(void) +static void LinkPartnerHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; LinkPartnerBufferExecCompleted(); } -static void LinkPartnerHandleCmd38(void) +static void LinkPartnerHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; LinkPartnerBufferExecCompleted(); } -static void LinkPartnerHandleCmd39(void) +static void LinkPartnerHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; LinkPartnerBufferExecCompleted(); } -static void LinkPartnerHandleCmd40(void) +static void LinkPartnerHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; LinkPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index f186bf3ff6..9fe8caf632 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -74,10 +74,10 @@ static void OpponentHandleTwoReturnValues(void); static void OpponentHandleChosenMonReturnValue(void); static void OpponentHandleOneReturnValue(void); static void OpponentHandleOneReturnValue_Duplicate(void); -static void OpponentHandleCmd37(void); -static void OpponentHandleCmd38(void); -static void OpponentHandleCmd39(void); -static void OpponentHandleCmd40(void); +static void OpponentHandleClearUnkVar(void); +static void OpponentHandleSetUnkVar(void); +static void OpponentHandleClearUnkFlag(void); +static void OpponentHandleToggleUnkFlag(void); static void OpponentHandleHitAnimation(void); static void OpponentHandleCmd42(void); static void OpponentHandlePlaySE(void); @@ -109,67 +109,67 @@ static void sub_8062A2C(void); static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - OpponentHandleGetMonData, - OpponentHandleGetRawMonData, - OpponentHandleSetMonData, - OpponentHandleSetRawMonData, - OpponentHandleLoadMonSprite, - OpponentHandleSwitchInAnim, - OpponentHandleReturnMonToBall, - OpponentHandleDrawTrainerPic, - OpponentHandleTrainerSlide, - OpponentHandleTrainerSlideBack, - OpponentHandleFaintAnimation, - OpponentHandlePaletteFade, - OpponentHandleSuccessBallThrowAnim, - OpponentHandleBallThrow, - OpponentHandlePause, - OpponentHandleMoveAnimation, - OpponentHandlePrintString, - OpponentHandlePrintSelectionString, - OpponentHandleChooseAction, - OpponentHandleUnknownYesNoBox, - OpponentHandleChooseMove, - OpponentHandleChooseItem, - OpponentHandleChoosePokemon, - OpponentHandleCmd23, - OpponentHandleHealthBarUpdate, - OpponentHandleExpUpdate, - OpponentHandleStatusIconUpdate, - OpponentHandleStatusAnimation, - OpponentHandleStatusXor, - OpponentHandleDataTransfer, - OpponentHandleDMA3Transfer, - OpponentHandlePlayBGM, - OpponentHandleCmd32, - OpponentHandleTwoReturnValues, - OpponentHandleChosenMonReturnValue, - OpponentHandleOneReturnValue, - OpponentHandleOneReturnValue_Duplicate, - OpponentHandleCmd37, - OpponentHandleCmd38, - OpponentHandleCmd39, - OpponentHandleCmd40, - OpponentHandleHitAnimation, - OpponentHandleCmd42, - OpponentHandlePlaySE, - OpponentHandlePlayFanfareOrBGM, - OpponentHandleFaintingCry, - OpponentHandleIntroSlide, - OpponentHandleIntroTrainerBallThrow, - OpponentHandleDrawPartyStatusSummary, - OpponentHandleHidePartyStatusSummary, - OpponentHandleEndBounceEffect, - OpponentHandleSpriteInvisibility, - OpponentHandleBattleAnimation, - OpponentHandleLinkStandbyMsg, - OpponentHandleResetActionMoveSelection, - OpponentHandleCmd55, - OpponentCmdEnd + [CONTROLLER_GETMONDATA] = OpponentHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = OpponentHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = OpponentHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = OpponentHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = OpponentHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = OpponentHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = OpponentHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = OpponentHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = OpponentHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = OpponentHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = OpponentHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = OpponentHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = OpponentHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = OpponentHandleBallThrow, + [CONTROLLER_PAUSE] = OpponentHandlePause, + [CONTROLLER_MOVEANIMATION] = OpponentHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = OpponentHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = OpponentHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = OpponentHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = OpponentHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = OpponentHandleChooseMove, + [CONTROLLER_OPENBAG] = OpponentHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = OpponentHandleChoosePokemon, + [CONTROLLER_23] = OpponentHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = OpponentHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = OpponentHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = OpponentHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = OpponentHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = OpponentHandleStatusXor, + [CONTROLLER_DATATRANSFER] = OpponentHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = OpponentHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = OpponentHandlePlayBGM, + [CONTROLLER_32] = OpponentHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = OpponentHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = OpponentHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = OpponentHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = OpponentHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = OpponentHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = OpponentHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = OpponentHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = OpponentHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = OpponentHandleHitAnimation, + [CONTROLLER_42] = OpponentHandleCmd42, + [CONTROLLER_PLAYSE] = OpponentHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = OpponentHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = OpponentHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = OpponentHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = OpponentHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = OpponentHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = OpponentHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = OpponentHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = OpponentHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = OpponentHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = OpponentHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = OpponentHandleResetActionMoveSelection, + [CONTROLLER_55] = OpponentHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = OpponentCmdEnd }; // unknown unused data -static const u8 sUnknown_0831C7AC[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20}; +static const u8 sUnused[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20}; static void nullsub_26(void) { @@ -1769,27 +1769,27 @@ static void OpponentHandleOneReturnValue_Duplicate(void) OpponentBufferExecCompleted(); } -static void OpponentHandleCmd37(void) +static void OpponentHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; OpponentBufferExecCompleted(); } -static void OpponentHandleCmd38(void) +static void OpponentHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; OpponentBufferExecCompleted(); } -static void OpponentHandleCmd39(void) +static void OpponentHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; OpponentBufferExecCompleted(); } -static void OpponentHandleCmd40(void) +static void OpponentHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; OpponentBufferExecCompleted(); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 7c34efd443..c1d7fc2a43 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -75,10 +75,10 @@ static void PlayerHandleTwoReturnValues(void); static void PlayerHandleChosenMonReturnValue(void); static void PlayerHandleOneReturnValue(void); static void PlayerHandleOneReturnValue_Duplicate(void); -static void PlayerHandleCmd37(void); -static void PlayerHandleCmd38(void); -static void PlayerHandleCmd39(void); -static void PlayerHandleCmd40(void); +static void PlayerHandleClearUnkVar(void); +static void PlayerHandleSetUnkVar(void); +static void PlayerHandleClearUnkFlag(void); +static void PlayerHandleToggleUnkFlag(void); static void PlayerHandleHitAnimation(void); static void PlayerHandleCmd42(void); static void PlayerHandlePlaySE(void); @@ -125,69 +125,69 @@ static void sub_805CE38(void); static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - PlayerHandleGetMonData, - PlayerHandleGetRawMonData, - PlayerHandleSetMonData, - PlayerHandleSetRawMonData, - PlayerHandleLoadMonSprite, - PlayerHandleSwitchInAnim, - PlayerHandleReturnMonToBall, - PlayerHandleDrawTrainerPic, - PlayerHandleTrainerSlide, - PlayerHandleTrainerSlideBack, - PlayerHandleFaintAnimation, - PlayerHandlePaletteFade, - PlayerHandleSuccessBallThrowAnim, - PlayerHandleBallThrowAnim, - PlayerHandlePause, - PlayerHandleMoveAnimation, - PlayerHandlePrintString, - PlayerHandlePrintSelectionString, - PlayerHandleChooseAction, - PlayerHandleUnknownYesNoBox, - PlayerHandleChooseMove, - PlayerHandleChooseItem, - PlayerHandleChoosePokemon, - PlayerHandleCmd23, - PlayerHandleHealthBarUpdate, - PlayerHandleExpUpdate, - PlayerHandleStatusIconUpdate, - PlayerHandleStatusAnimation, - PlayerHandleStatusXor, - PlayerHandleDataTransfer, - PlayerHandleDMA3Transfer, - PlayerHandlePlayBGM, - PlayerHandleCmd32, - PlayerHandleTwoReturnValues, - PlayerHandleChosenMonReturnValue, - PlayerHandleOneReturnValue, - PlayerHandleOneReturnValue_Duplicate, - PlayerHandleCmd37, - PlayerHandleCmd38, - PlayerHandleCmd39, - PlayerHandleCmd40, - PlayerHandleHitAnimation, - PlayerHandleCmd42, - PlayerHandlePlaySE, - PlayerHandlePlayFanfareOrBGM, - PlayerHandleFaintingCry, - PlayerHandleIntroSlide, - PlayerHandleIntroTrainerBallThrow, - PlayerHandleDrawPartyStatusSummary, - PlayerHandleHidePartyStatusSummary, - PlayerHandleEndBounceEffect, - PlayerHandleSpriteInvisibility, - PlayerHandleBattleAnimation, - PlayerHandleLinkStandbyMsg, - PlayerHandleResetActionMoveSelection, - PlayerHandleCmd55, - PlayerCmdEnd + [CONTROLLER_GETMONDATA] = PlayerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = PlayerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = PlayerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = PlayerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = PlayerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = PlayerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = PlayerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = PlayerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = PlayerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = PlayerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = PlayerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = PlayerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = PlayerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = PlayerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = PlayerHandlePause, + [CONTROLLER_MOVEANIMATION] = PlayerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = PlayerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = PlayerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = PlayerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = PlayerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = PlayerHandleChooseMove, + [CONTROLLER_OPENBAG] = PlayerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = PlayerHandleChoosePokemon, + [CONTROLLER_23] = PlayerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = PlayerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = PlayerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = PlayerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = PlayerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = PlayerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = PlayerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = PlayerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = PlayerHandlePlayBGM, + [CONTROLLER_32] = PlayerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = PlayerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = PlayerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = PlayerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = PlayerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = PlayerHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = PlayerHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = PlayerHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = PlayerHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = PlayerHandleHitAnimation, + [CONTROLLER_42] = PlayerHandleCmd42, + [CONTROLLER_PLAYSE] = PlayerHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = PlayerHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = PlayerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = PlayerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = PlayerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = PlayerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = PlayerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = PlayerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = PlayerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = PlayerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = PlayerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerHandleResetActionMoveSelection, + [CONTROLLER_55] = PlayerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = PlayerCmdEnd }; static const u8 sTargetIdentities[] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT}; // unknown unused data -static const u8 sUnknown_0831C5FC[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58}; +static const u8 sUnused[] = {0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58}; void nullsub_21(void) { @@ -2822,27 +2822,27 @@ static void PlayerHandleOneReturnValue_Duplicate(void) PlayerBufferExecCompleted(); } -static void PlayerHandleCmd37(void) +static void PlayerHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; PlayerBufferExecCompleted(); } -static void PlayerHandleCmd38(void) +static void PlayerHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; PlayerBufferExecCompleted(); } -static void PlayerHandleCmd39(void) +static void PlayerHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; PlayerBufferExecCompleted(); } -static void PlayerHandleCmd40(void) +static void PlayerHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; PlayerBufferExecCompleted(); } diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index af6b739ccf..d826d2183a 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -65,10 +65,10 @@ static void PlayerPartnerHandleTwoReturnValues(void); static void PlayerPartnerHandleChosenMonReturnValue(void); static void PlayerPartnerHandleOneReturnValue(void); static void PlayerPartnerHandleOneReturnValue_Duplicate(void); -static void PlayerPartnerHandleCmd37(void); -static void PlayerPartnerHandleCmd38(void); -static void PlayerPartnerHandleCmd39(void); -static void PlayerPartnerHandleCmd40(void); +static void PlayerPartnerHandleClearUnkVar(void); +static void PlayerPartnerHandleSetUnkVar(void); +static void PlayerPartnerHandleClearUnkFlag(void); +static void PlayerPartnerHandleToggleUnkFlag(void); static void PlayerPartnerHandleHitAnimation(void); static void PlayerPartnerHandleCmd42(void); static void PlayerPartnerHandlePlaySE(void); @@ -105,67 +105,67 @@ static void sub_81BE498(void); static void (*const sPlayerPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - PlayerPartnerHandleGetMonData, - PlayerPartnerHandleGetRawMonData, - PlayerPartnerHandleSetMonData, - PlayerPartnerHandleSetRawMonData, - PlayerPartnerHandleLoadMonSprite, - PlayerPartnerHandleSwitchInAnim, - PlayerPartnerHandleReturnMonToBall, - PlayerPartnerHandleDrawTrainerPic, - PlayerPartnerHandleTrainerSlide, - PlayerPartnerHandleTrainerSlideBack, - PlayerPartnerHandleFaintAnimation, - PlayerPartnerHandlePaletteFade, - PlayerPartnerHandleSuccessBallThrowAnim, - PlayerPartnerHandleBallThrowAnim, - PlayerPartnerHandlePause, - PlayerPartnerHandleMoveAnimation, - PlayerPartnerHandlePrintString, - PlayerPartnerHandlePrintSelectionString, - PlayerPartnerHandleChooseAction, - PlayerPartnerHandleUnknownYesNoBox, - PlayerPartnerHandleChooseMove, - PlayerPartnerHandleChooseItem, - PlayerPartnerHandleChoosePokemon, - PlayerPartnerHandleCmd23, - PlayerPartnerHandleHealthBarUpdate, - PlayerPartnerHandleExpUpdate, - PlayerPartnerHandleStatusIconUpdate, - PlayerPartnerHandleStatusAnimation, - PlayerPartnerHandleStatusXor, - PlayerPartnerHandleDataTransfer, - PlayerPartnerHandleDMA3Transfer, - PlayerPartnerHandlePlayBGM, - PlayerPartnerHandleCmd32, - PlayerPartnerHandleTwoReturnValues, - PlayerPartnerHandleChosenMonReturnValue, - PlayerPartnerHandleOneReturnValue, - PlayerPartnerHandleOneReturnValue_Duplicate, - PlayerPartnerHandleCmd37, - PlayerPartnerHandleCmd38, - PlayerPartnerHandleCmd39, - PlayerPartnerHandleCmd40, - PlayerPartnerHandleHitAnimation, - PlayerPartnerHandleCmd42, - PlayerPartnerHandlePlaySE, - PlayerPartnerHandlePlayFanfareOrBGM, - PlayerPartnerHandleFaintingCry, - PlayerPartnerHandleIntroSlide, - PlayerPartnerHandleIntroTrainerBallThrow, - PlayerPartnerHandleDrawPartyStatusSummary, - PlayerPartnerHandleHidePartyStatusSummary, - PlayerPartnerHandleEndBounceEffect, - PlayerPartnerHandleSpriteInvisibility, - PlayerPartnerHandleBattleAnimation, - PlayerPartnerHandleLinkStandbyMsg, - PlayerPartnerHandleResetActionMoveSelection, - PlayerPartnerHandleCmd55, - PlayerPartnerCmdEnd + [CONTROLLER_GETMONDATA] = PlayerPartnerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = PlayerPartnerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = PlayerPartnerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = PlayerPartnerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = PlayerPartnerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = PlayerPartnerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = PlayerPartnerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = PlayerPartnerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = PlayerPartnerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = PlayerPartnerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = PlayerPartnerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = PlayerPartnerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = PlayerPartnerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = PlayerPartnerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = PlayerPartnerHandlePause, + [CONTROLLER_MOVEANIMATION] = PlayerPartnerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = PlayerPartnerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = PlayerPartnerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = PlayerPartnerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = PlayerPartnerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = PlayerPartnerHandleChooseMove, + [CONTROLLER_OPENBAG] = PlayerPartnerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = PlayerPartnerHandleChoosePokemon, + [CONTROLLER_23] = PlayerPartnerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = PlayerPartnerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = PlayerPartnerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = PlayerPartnerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = PlayerPartnerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = PlayerPartnerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = PlayerPartnerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = PlayerPartnerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = PlayerPartnerHandlePlayBGM, + [CONTROLLER_32] = PlayerPartnerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = PlayerPartnerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = PlayerPartnerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = PlayerPartnerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = PlayerPartnerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = PlayerPartnerHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = PlayerPartnerHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = PlayerPartnerHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = PlayerPartnerHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = PlayerPartnerHandleHitAnimation, + [CONTROLLER_42] = PlayerPartnerHandleCmd42, + [CONTROLLER_PLAYSE] = PlayerPartnerHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = PlayerPartnerHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = PlayerPartnerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = PlayerPartnerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = PlayerPartnerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = PlayerPartnerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = PlayerPartnerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = PlayerPartnerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = PlayerPartnerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = PlayerPartnerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = PlayerPartnerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = PlayerPartnerHandleResetActionMoveSelection, + [CONTROLLER_55] = PlayerPartnerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = PlayerPartnerCmdEnd }; // unknown unused data -static const u8 sUnknown_08617254[] = +static const u8 sUnused[] = { 0x83, 0x4d, 0xf3, 0x5f, 0x6f, 0x4f, 0xeb, 0x3e, 0x67, 0x2e, 0x10, 0x46, 0x8c, 0x3d, 0x28, 0x35, @@ -1679,27 +1679,27 @@ static void PlayerPartnerHandleOneReturnValue_Duplicate(void) PlayerPartnerBufferExecCompleted(); } -static void PlayerPartnerHandleCmd37(void) +static void PlayerPartnerHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; PlayerPartnerBufferExecCompleted(); } -static void PlayerPartnerHandleCmd38(void) +static void PlayerPartnerHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; PlayerPartnerBufferExecCompleted(); } -static void PlayerPartnerHandleCmd39(void) +static void PlayerPartnerHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; PlayerPartnerBufferExecCompleted(); } -static void PlayerPartnerHandleCmd40(void) +static void PlayerPartnerHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; PlayerPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index ca7cd4adc6..63e1ff7a0f 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -69,10 +69,10 @@ static void RecordedOpponentHandleTwoReturnValues(void); static void RecordedOpponentHandleChosenMonReturnValue(void); static void RecordedOpponentHandleOneReturnValue(void); static void RecordedOpponentHandleOneReturnValue_Duplicate(void); -static void RecordedOpponentHandleCmd37(void); -static void RecordedOpponentHandleCmd38(void); -static void RecordedOpponentHandleCmd39(void); -static void RecordedOpponentHandleCmd40(void); +static void RecordedOpponentHandleClearUnkVar(void); +static void RecordedOpponentHandleSetUnkVar(void); +static void RecordedOpponentHandleClearUnkFlag(void); +static void RecordedOpponentHandleToggleUnkFlag(void); static void RecordedOpponentHandleHitAnimation(void); static void RecordedOpponentHandleCmd42(void); static void RecordedOpponentHandlePlaySE(void); @@ -104,63 +104,63 @@ static void sub_818975C(void); static void (*const sRecordedOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - RecordedOpponentHandleGetMonData, - RecordedOpponentHandleGetRawMonData, - RecordedOpponentHandleSetMonData, - RecordedOpponentHandleSetRawMonData, - RecordedOpponentHandleLoadMonSprite, - RecordedOpponentHandleSwitchInAnim, - RecordedOpponentHandleReturnMonToBall, - RecordedOpponentHandleDrawTrainerPic, - RecordedOpponentHandleTrainerSlide, - RecordedOpponentHandleTrainerSlideBack, - RecordedOpponentHandleFaintAnimation, - RecordedOpponentHandlePaletteFade, - RecordedOpponentHandleSuccessBallThrowAnim, - RecordedOpponentHandleBallThrowAnim, - RecordedOpponentHandlePause, - RecordedOpponentHandleMoveAnimation, - RecordedOpponentHandlePrintString, - RecordedOpponentHandlePrintSelectionString, - RecordedOpponentHandleChooseAction, - RecordedOpponentHandleUnknownYesNoBox, - RecordedOpponentHandleChooseMove, - RecordedOpponentHandleChooseItem, - RecordedOpponentHandleChoosePokemon, - RecordedOpponentHandleCmd23, - RecordedOpponentHandleHealthBarUpdate, - RecordedOpponentHandleExpUpdate, - RecordedOpponentHandleStatusIconUpdate, - RecordedOpponentHandleStatusAnimation, - RecordedOpponentHandleStatusXor, - RecordedOpponentHandleDataTransfer, - RecordedOpponentHandleDMA3Transfer, - RecordedOpponentHandlePlayBGM, - RecordedOpponentHandleCmd32, - RecordedOpponentHandleTwoReturnValues, - RecordedOpponentHandleChosenMonReturnValue, - RecordedOpponentHandleOneReturnValue, - RecordedOpponentHandleOneReturnValue_Duplicate, - RecordedOpponentHandleCmd37, - RecordedOpponentHandleCmd38, - RecordedOpponentHandleCmd39, - RecordedOpponentHandleCmd40, - RecordedOpponentHandleHitAnimation, - RecordedOpponentHandleCmd42, - RecordedOpponentHandlePlaySE, - RecordedOpponentHandlePlayFanfareOrBGM, - RecordedOpponentHandleFaintingCry, - RecordedOpponentHandleIntroSlide, - RecordedOpponentHandleIntroTrainerBallThrow, - RecordedOpponentHandleDrawPartyStatusSummary, - RecordedOpponentHandleHidePartyStatusSummary, - RecordedOpponentHandleEndBounceEffect, - RecordedOpponentHandleSpriteInvisibility, - RecordedOpponentHandleBattleAnimation, - RecordedOpponentHandleLinkStandbyMsg, - RecordedOpponentHandleResetActionMoveSelection, - RecordedOpponentHandleCmd55, - RecordedOpponentCmdEnd + [CONTROLLER_GETMONDATA] = RecordedOpponentHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = RecordedOpponentHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = RecordedOpponentHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = RecordedOpponentHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = RecordedOpponentHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = RecordedOpponentHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = RecordedOpponentHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = RecordedOpponentHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = RecordedOpponentHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = RecordedOpponentHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = RecordedOpponentHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = RecordedOpponentHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = RecordedOpponentHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = RecordedOpponentHandleBallThrowAnim, + [CONTROLLER_PAUSE] = RecordedOpponentHandlePause, + [CONTROLLER_MOVEANIMATION] = RecordedOpponentHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = RecordedOpponentHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = RecordedOpponentHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = RecordedOpponentHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = RecordedOpponentHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = RecordedOpponentHandleChooseMove, + [CONTROLLER_OPENBAG] = RecordedOpponentHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = RecordedOpponentHandleChoosePokemon, + [CONTROLLER_23] = RecordedOpponentHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = RecordedOpponentHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = RecordedOpponentHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = RecordedOpponentHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = RecordedOpponentHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = RecordedOpponentHandleStatusXor, + [CONTROLLER_DATATRANSFER] = RecordedOpponentHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = RecordedOpponentHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = RecordedOpponentHandlePlayBGM, + [CONTROLLER_32] = RecordedOpponentHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = RecordedOpponentHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = RecordedOpponentHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = RecordedOpponentHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = RecordedOpponentHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = RecordedOpponentHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = RecordedOpponentHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = RecordedOpponentHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = RecordedOpponentHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = RecordedOpponentHandleHitAnimation, + [CONTROLLER_42] = RecordedOpponentHandleCmd42, + [CONTROLLER_PLAYSE] = RecordedOpponentHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = RecordedOpponentHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = RecordedOpponentHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = RecordedOpponentHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = RecordedOpponentHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = RecordedOpponentHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = RecordedOpponentHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = RecordedOpponentHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = RecordedOpponentHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = RecordedOpponentHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = RecordedOpponentHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = RecordedOpponentHandleResetActionMoveSelection, + [CONTROLLER_55] = RecordedOpponentHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = RecordedOpponentCmdEnd }; static void nullsub_70(void) @@ -1544,27 +1544,27 @@ static void RecordedOpponentHandleOneReturnValue_Duplicate(void) RecordedOpponentBufferExecCompleted(); } -static void RecordedOpponentHandleCmd37(void) +static void RecordedOpponentHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; RecordedOpponentBufferExecCompleted(); } -static void RecordedOpponentHandleCmd38(void) +static void RecordedOpponentHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; RecordedOpponentBufferExecCompleted(); } -static void RecordedOpponentHandleCmd39(void) +static void RecordedOpponentHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; RecordedOpponentBufferExecCompleted(); } -static void RecordedOpponentHandleCmd40(void) +static void RecordedOpponentHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; RecordedOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 72af27d5ec..3d4faf0cd0 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -65,10 +65,10 @@ static void RecordedPlayerHandleTwoReturnValues(void); static void RecordedPlayerHandleChosenMonReturnValue(void); static void RecordedPlayerHandleOneReturnValue(void); static void RecordedPlayerHandleOneReturnValue_Duplicate(void); -static void RecordedPlayerHandleCmd37(void); -static void RecordedPlayerHandleCmd38(void); -static void RecordedPlayerHandleCmd39(void); -static void RecordedPlayerHandleCmd40(void); +static void RecordedPlayerHandleClearUnkVar(void); +static void RecordedPlayerHandleSetUnkVar(void); +static void RecordedPlayerHandleClearUnkFlag(void); +static void RecordedPlayerHandleToggleUnkFlag(void); static void RecordedPlayerHandleHitAnimation(void); static void RecordedPlayerHandleCmd42(void); static void RecordedPlayerHandlePlaySE(void); @@ -99,63 +99,63 @@ static void sub_818CDF4(void); static void (*const sRecordedPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - RecordedPlayerHandleGetMonData, - RecordedPlayerHandleGetRawMonData, - RecordedPlayerHandleSetMonData, - RecordedPlayerHandleSetRawMonData, - RecordedPlayerHandleLoadMonSprite, - RecordedPlayerHandleSwitchInAnim, - RecordedPlayerHandleReturnMonToBall, - RecordedPlayerHandleDrawTrainerPic, - RecordedPlayerHandleTrainerSlide, - RecordedPlayerHandleTrainerSlideBack, - RecordedPlayerHandleFaintAnimation, - RecordedPlayerHandlePaletteFade, - RecordedPlayerHandleSuccessBallThrowAnim, - RecordedPlayerHandleBallThrowAnim, - RecordedPlayerHandlePause, - RecordedPlayerHandleMoveAnimation, - RecordedPlayerHandlePrintString, - RecordedPlayerHandlePrintSelectionString, - RecordedPlayerHandleChooseAction, - RecordedPlayerHandleUnknownYesNoBox, - RecordedPlayerHandleChooseMove, - RecordedPlayerHandleChooseItem, - RecordedPlayerHandleChoosePokemon, - RecordedPlayerHandleCmd23, - RecordedPlayerHandleHealthBarUpdate, - RecordedPlayerHandleExpUpdate, - RecordedPlayerHandleStatusIconUpdate, - RecordedPlayerHandleStatusAnimation, - RecordedPlayerHandleStatusXor, - RecordedPlayerHandleDataTransfer, - RecordedPlayerHandleDMA3Transfer, - RecordedPlayerHandlePlayBGM, - RecordedPlayerHandleCmd32, - RecordedPlayerHandleTwoReturnValues, - RecordedPlayerHandleChosenMonReturnValue, - RecordedPlayerHandleOneReturnValue, - RecordedPlayerHandleOneReturnValue_Duplicate, - RecordedPlayerHandleCmd37, - RecordedPlayerHandleCmd38, - RecordedPlayerHandleCmd39, - RecordedPlayerHandleCmd40, - RecordedPlayerHandleHitAnimation, - RecordedPlayerHandleCmd42, - RecordedPlayerHandlePlaySE, - RecordedPlayerHandlePlayFanfareOrBGM, - RecordedPlayerHandleFaintingCry, - RecordedPlayerHandleIntroSlide, - RecordedPlayerHandleIntroTrainerBallThrow, - RecordedPlayerHandleDrawPartyStatusSummary, - RecordedPlayerHandleHidePartyStatusSummary, - RecordedPlayerHandleEndBounceEffect, - RecordedPlayerHandleSpriteInvisibility, - RecordedPlayerHandleBattleAnimation, - RecordedPlayerHandleLinkStandbyMsg, - RecordedPlayerHandleResetActionMoveSelection, - RecordedPlayerHandleCmd55, - RecordedPlayerCmdEnd + [CONTROLLER_GETMONDATA] = RecordedPlayerHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = RecordedPlayerHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = RecordedPlayerHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = RecordedPlayerHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = RecordedPlayerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = RecordedPlayerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = RecordedPlayerHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = RecordedPlayerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = RecordedPlayerHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = RecordedPlayerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = RecordedPlayerHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = RecordedPlayerHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = RecordedPlayerHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = RecordedPlayerHandleBallThrowAnim, + [CONTROLLER_PAUSE] = RecordedPlayerHandlePause, + [CONTROLLER_MOVEANIMATION] = RecordedPlayerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = RecordedPlayerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = RecordedPlayerHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = RecordedPlayerHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = RecordedPlayerHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = RecordedPlayerHandleChooseMove, + [CONTROLLER_OPENBAG] = RecordedPlayerHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = RecordedPlayerHandleChoosePokemon, + [CONTROLLER_23] = RecordedPlayerHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = RecordedPlayerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = RecordedPlayerHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = RecordedPlayerHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = RecordedPlayerHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = RecordedPlayerHandleStatusXor, + [CONTROLLER_DATATRANSFER] = RecordedPlayerHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = RecordedPlayerHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = RecordedPlayerHandlePlayBGM, + [CONTROLLER_32] = RecordedPlayerHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = RecordedPlayerHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = RecordedPlayerHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = RecordedPlayerHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = RecordedPlayerHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = RecordedPlayerHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = RecordedPlayerHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = RecordedPlayerHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = RecordedPlayerHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = RecordedPlayerHandleHitAnimation, + [CONTROLLER_42] = RecordedPlayerHandleCmd42, + [CONTROLLER_PLAYSE] = RecordedPlayerHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = RecordedPlayerHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = RecordedPlayerHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = RecordedPlayerHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = RecordedPlayerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = RecordedPlayerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = RecordedPlayerHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = RecordedPlayerHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = RecordedPlayerHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = RecordedPlayerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = RecordedPlayerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = RecordedPlayerHandleResetActionMoveSelection, + [CONTROLLER_55] = RecordedPlayerHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = RecordedPlayerCmdEnd }; static void nullsub_120(void) @@ -1561,27 +1561,27 @@ static void RecordedPlayerHandleOneReturnValue_Duplicate(void) RecordedPlayerBufferExecCompleted(); } -static void RecordedPlayerHandleCmd37(void) +static void RecordedPlayerHandleClearUnkVar(void) { - gUnknown_02022D0C.field_0 = 0; + gUnusedControllerStruct.unk = 0; RecordedPlayerBufferExecCompleted(); } -static void RecordedPlayerHandleCmd38(void) +static void RecordedPlayerHandleSetUnkVar(void) { - gUnknown_02022D0C.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.unk = gBattleBufferA[gActiveBattler][1]; RecordedPlayerBufferExecCompleted(); } -static void RecordedPlayerHandleCmd39(void) +static void RecordedPlayerHandleClearUnkFlag(void) { - gUnknown_02022D0C.flag_x80 = 0; + gUnusedControllerStruct.flag = 0; RecordedPlayerBufferExecCompleted(); } -static void RecordedPlayerHandleCmd40(void) +static void RecordedPlayerHandleToggleUnkFlag(void) { - gUnknown_02022D0C.flag_x80 ^= 1; + gUnusedControllerStruct.flag ^= 1; RecordedPlayerBufferExecCompleted(); } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 9cb427e129..b5a8b1bb66 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -62,10 +62,10 @@ static void SafariHandleTwoReturnValues(void); static void SafariHandleChosenMonReturnValue(void); static void SafariHandleOneReturnValue(void); static void SafariHandleOneReturnValue_Duplicate(void); -static void SafariHandleCmd37(void); -static void SafariHandleCmd38(void); -static void SafariHandleCmd39(void); -static void SafariHandleCmd40(void); +static void SafariHandleClearUnkVar(void); +static void SafariHandleSetUnkVar(void); +static void SafariHandleClearUnkFlag(void); +static void SafariHandleToggleUnkFlag(void); static void SafariHandleHitAnimation(void); static void SafariHandleCmd42(void); static void SafariHandlePlaySE(void); @@ -89,63 +89,63 @@ static void CompleteWhenChosePokeblock(void); static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - SafariHandleGetMonData, - SafariHandleGetRawMonData, - SafariHandleSetMonData, - SafariHandleSetRawMonData, - SafariHandleLoadMonSprite, - SafariHandleSwitchInAnim, - SafariHandleReturnMonToBall, - SafariHandleDrawTrainerPic, - SafariHandleTrainerSlide, - SafariHandleTrainerSlideBack, - SafariHandleFaintAnimation, - SafariHandlePaletteFade, - SafariHandleSuccessBallThrowAnim, - SafariHandleBallThrowAnim, - SafariHandlePause, - SafariHandleMoveAnimation, - SafariHandlePrintString, - SafariHandlePrintSelectionString, - SafariHandleChooseAction, - SafariHandleUnknownYesNoBox, - SafariHandleChooseMove, - SafariHandleChooseItem, - SafariHandleChoosePokemon, - SafariHandleCmd23, - SafariHandleHealthBarUpdate, - SafariHandleExpUpdate, - SafariHandleStatusIconUpdate, - SafariHandleStatusAnimation, - SafariHandleStatusXor, - SafariHandleDataTransfer, - SafariHandleDMA3Transfer, - SafariHandlePlayBGM, - SafariHandleCmd32, - SafariHandleTwoReturnValues, - SafariHandleChosenMonReturnValue, - SafariHandleOneReturnValue, - SafariHandleOneReturnValue_Duplicate, - SafariHandleCmd37, - SafariHandleCmd38, - SafariHandleCmd39, - SafariHandleCmd40, - SafariHandleHitAnimation, - SafariHandleCmd42, - SafariHandlePlaySE, - SafariHandlePlayFanfareOrBGM, - SafariHandleFaintingCry, - SafariHandleIntroSlide, - SafariHandleIntroTrainerBallThrow, - SafariHandleDrawPartyStatusSummary, - SafariHandleHidePartyStatusSummary, - SafariHandleEndBounceEffect, - SafariHandleSpriteInvisibility, - SafariHandleBattleAnimation, - SafariHandleLinkStandbyMsg, - SafariHandleResetActionMoveSelection, - SafariHandleCmd55, - SafariCmdEnd + [CONTROLLER_GETMONDATA] = SafariHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = SafariHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = SafariHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = SafariHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = SafariHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = SafariHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = SafariHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = SafariHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = SafariHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = SafariHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = SafariHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = SafariHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = SafariHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = SafariHandleBallThrowAnim, + [CONTROLLER_PAUSE] = SafariHandlePause, + [CONTROLLER_MOVEANIMATION] = SafariHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = SafariHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = SafariHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = SafariHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = SafariHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = SafariHandleChooseMove, + [CONTROLLER_OPENBAG] = SafariHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = SafariHandleChoosePokemon, + [CONTROLLER_23] = SafariHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = SafariHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = SafariHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = SafariHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = SafariHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = SafariHandleStatusXor, + [CONTROLLER_DATATRANSFER] = SafariHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = SafariHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = SafariHandlePlayBGM, + [CONTROLLER_32] = SafariHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = SafariHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = SafariHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = SafariHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = SafariHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = SafariHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = SafariHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = SafariHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = SafariHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = SafariHandleHitAnimation, + [CONTROLLER_42] = SafariHandleCmd42, + [CONTROLLER_PLAYSE] = SafariHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = SafariHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = SafariHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = SafariHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = SafariHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = SafariHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = SafariHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = SafariHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = SafariHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = SafariHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = SafariHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = SafariHandleResetActionMoveSelection, + [CONTROLLER_55] = SafariHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = SafariCmdEnd }; static void SpriteCB_Null4(void) @@ -553,22 +553,22 @@ static void SafariHandleOneReturnValue_Duplicate(void) SafariBufferExecCompleted(); } -static void SafariHandleCmd37(void) +static void SafariHandleClearUnkVar(void) { SafariBufferExecCompleted(); } -static void SafariHandleCmd38(void) +static void SafariHandleSetUnkVar(void) { SafariBufferExecCompleted(); } -static void SafariHandleCmd39(void) +static void SafariHandleClearUnkFlag(void) { SafariBufferExecCompleted(); } -static void SafariHandleCmd40(void) +static void SafariHandleToggleUnkFlag(void) { SafariBufferExecCompleted(); } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index aa50bc159d..83a977073f 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -70,10 +70,10 @@ static void WallyHandleTwoReturnValues(void); static void WallyHandleChosenMonReturnValue(void); static void WallyHandleOneReturnValue(void); static void WallyHandleOneReturnValue_Duplicate(void); -static void WallyHandleCmd37(void); -static void WallyHandleCmd38(void); -static void WallyHandleCmd39(void); -static void WallyHandleCmd40(void); +static void WallyHandleClearUnkVar(void); +static void WallyHandleSetUnkVar(void); +static void WallyHandleClearUnkFlag(void); +static void WallyHandleToggleUnkFlag(void); static void WallyHandleHitAnimation(void); static void WallyHandleCmd42(void); static void WallyHandlePlaySE(void); @@ -102,63 +102,63 @@ static void sub_816AC04(u8 taskId); static void (*const sWallyBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { - WallyHandleGetMonData, - WallyHandleGetRawMonData, - WallyHandleSetMonData, - WallyHandleSetRawMonData, - WallyHandleLoadMonSprite, - WallyHandleSwitchInAnim, - WallyHandleReturnMonToBall, - WallyHandleDrawTrainerPic, - WallyHandleTrainerSlide, - WallyHandleTrainerSlideBack, - WallyHandleFaintAnimation, - WallyHandlePaletteFade, - WallyHandleSuccessBallThrowAnim, - WallyHandleBallThrowAnim, - WallyHandlePause, - WallyHandleMoveAnimation, - WallyHandlePrintString, - WallyHandlePrintSelectionString, - WallyHandleChooseAction, - WallyHandleUnknownYesNoBox, - WallyHandleChooseMove, - WallyHandleChooseItem, - WallyHandleChoosePokemon, - WallyHandleCmd23, - WallyHandleHealthBarUpdate, - WallyHandleExpUpdate, - WallyHandleStatusIconUpdate, - WallyHandleStatusAnimation, - WallyHandleStatusXor, - WallyHandleDataTransfer, - WallyHandleDMA3Transfer, - WallyHandlePlayBGM, - WallyHandleCmd32, - WallyHandleTwoReturnValues, - WallyHandleChosenMonReturnValue, - WallyHandleOneReturnValue, - WallyHandleOneReturnValue_Duplicate, - WallyHandleCmd37, - WallyHandleCmd38, - WallyHandleCmd39, - WallyHandleCmd40, - WallyHandleHitAnimation, - WallyHandleCmd42, - WallyHandlePlaySE, - WallyHandlePlayFanfareOrBGM, - WallyHandleFaintingCry, - WallyHandleIntroSlide, - WallyHandleIntroTrainerBallThrow, - WallyHandleDrawPartyStatusSummary, - WallyHandleHidePartyStatusSummary, - WallyHandleEndBounceEffect, - WallyHandleSpriteInvisibility, - WallyHandleBattleAnimation, - WallyHandleLinkStandbyMsg, - WallyHandleResetActionMoveSelection, - WallyHandleCmd55, - WallyCmdEnd + [CONTROLLER_GETMONDATA] = WallyHandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = WallyHandleGetRawMonData, + [CONTROLLER_SETMONDATA] = WallyHandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = WallyHandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = WallyHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = WallyHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = WallyHandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = WallyHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = WallyHandleTrainerSlide, + [CONTROLLER_TRAINERSLIDEBACK] = WallyHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = WallyHandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = WallyHandlePaletteFade, + [CONTROLLER_SUCCESSBALLTHROWANIM] = WallyHandleSuccessBallThrowAnim, + [CONTROLLER_BALLTHROWANIM] = WallyHandleBallThrowAnim, + [CONTROLLER_PAUSE] = WallyHandlePause, + [CONTROLLER_MOVEANIMATION] = WallyHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = WallyHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = WallyHandlePrintSelectionString, + [CONTROLLER_CHOOSEACTION] = WallyHandleChooseAction, + [CONTROLLER_UNKNOWNYESNOBOX] = WallyHandleUnknownYesNoBox, + [CONTROLLER_CHOOSEMOVE] = WallyHandleChooseMove, + [CONTROLLER_OPENBAG] = WallyHandleChooseItem, + [CONTROLLER_CHOOSEPOKEMON] = WallyHandleChoosePokemon, + [CONTROLLER_23] = WallyHandleCmd23, + [CONTROLLER_HEALTHBARUPDATE] = WallyHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = WallyHandleExpUpdate, + [CONTROLLER_STATUSICONUPDATE] = WallyHandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = WallyHandleStatusAnimation, + [CONTROLLER_STATUSXOR] = WallyHandleStatusXor, + [CONTROLLER_DATATRANSFER] = WallyHandleDataTransfer, + [CONTROLLER_DMA3TRANSFER] = WallyHandleDMA3Transfer, + [CONTROLLER_PLAYBGM] = WallyHandlePlayBGM, + [CONTROLLER_32] = WallyHandleCmd32, + [CONTROLLER_TWORETURNVALUES] = WallyHandleTwoReturnValues, + [CONTROLLER_CHOSENMONRETURNVALUE] = WallyHandleChosenMonReturnValue, + [CONTROLLER_ONERETURNVALUE] = WallyHandleOneReturnValue, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = WallyHandleOneReturnValue_Duplicate, + [CONTROLLER_CLEARUNKVAR] = WallyHandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = WallyHandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = WallyHandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = WallyHandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = WallyHandleHitAnimation, + [CONTROLLER_42] = WallyHandleCmd42, + [CONTROLLER_PLAYSE] = WallyHandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = WallyHandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = WallyHandleFaintingCry, + [CONTROLLER_INTROSLIDE] = WallyHandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = WallyHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = WallyHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = WallyHandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = WallyHandleEndBounceEffect, + [CONTROLLER_SPRITEINVISIBILITY] = WallyHandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = WallyHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = WallyHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = WallyHandleResetActionMoveSelection, + [CONTROLLER_55] = WallyHandleCmd55, + [CONTROLLER_TERMINATOR_NOP] = WallyCmdEnd }; static void SpriteCB_Null7(void) @@ -1346,22 +1346,22 @@ static void WallyHandleOneReturnValue_Duplicate(void) WallyBufferExecCompleted(); } -static void WallyHandleCmd37(void) +static void WallyHandleClearUnkVar(void) { WallyBufferExecCompleted(); } -static void WallyHandleCmd38(void) +static void WallyHandleSetUnkVar(void) { WallyBufferExecCompleted(); } -static void WallyHandleCmd39(void) +static void WallyHandleClearUnkFlag(void) { WallyBufferExecCompleted(); } -static void WallyHandleCmd40(void) +static void WallyHandleToggleUnkFlag(void) { WallyBufferExecCompleted(); } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 7f78c1ac9e..297a8b5770 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -13,12 +13,11 @@ #include "task.h" #include "util.h" #include "constants/abilities.h" -#include "constants/species.h" static EWRAM_DATA u8 sLinkSendTaskId = 0; static EWRAM_DATA u8 sLinkReceiveTaskId = 0; static EWRAM_DATA u8 sUnknown_02022D0A = 0; -EWRAM_DATA struct UnusedControllerStruct gUnknown_02022D0C = {}; +EWRAM_DATA struct UnusedControllerStruct gUnusedControllerStruct = {}; // Debug? Unused code that writes to it, never read static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {}; // this file's funcionts @@ -65,7 +64,7 @@ void SetUpBattleVarsAndBirchZigzagoon(void) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], SPECIES_ZIGZAGOON, 2, 32, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[0], SPECIES_ZIGZAGOON, 2, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); i = 0; SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, &i); } @@ -1283,7 +1282,7 @@ void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataPara { s32 i; - sBattleBuffersTransferData[0] = CONTROLLER_31; + sBattleBuffersTransferData[0] = CONTROLLER_PLAYBGM; sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; for (i = 0; i < songId; i++) // ???? @@ -1341,37 +1340,37 @@ void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitCmd37(u8 bufferId) +void BtlController_EmitClearUnkVar(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_37; - sBattleBuffersTransferData[1] = CONTROLLER_37; - sBattleBuffersTransferData[2] = CONTROLLER_37; - sBattleBuffersTransferData[3] = CONTROLLER_37; + sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKVAR; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitCmd38(u8 bufferId, u8 b) +void BtlController_EmitSetUnkVar(u8 bufferId, u8 b) { - sBattleBuffersTransferData[0] = CONTROLLER_38; + sBattleBuffersTransferData[0] = CONTROLLER_SETUNKVAR; sBattleBuffersTransferData[1] = b; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); } -void BtlController_EmitCmd39(u8 bufferId) +void BtlController_EmitClearUnkFlag(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_39; - sBattleBuffersTransferData[1] = CONTROLLER_39; - sBattleBuffersTransferData[2] = CONTROLLER_39; - sBattleBuffersTransferData[3] = CONTROLLER_39; + sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKFLAG; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitCmd40(u8 bufferId) +void BtlController_EmitToggleUnkFlag(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_40; - sBattleBuffersTransferData[1] = CONTROLLER_40; - sBattleBuffersTransferData[2] = CONTROLLER_40; - sBattleBuffersTransferData[3] = CONTROLLER_40; + sBattleBuffersTransferData[0] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[1] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[2] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[3] = CONTROLLER_TOGGLEUNKFLAG; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } @@ -1395,7 +1394,7 @@ void BtlController_EmitCmd42(u8 bufferId) void BtlController_EmitPlaySE(u8 bufferId, u16 songId) { - sBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND; + sBattleBuffersTransferData[0] = CONTROLLER_PLAYSE; sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; diff --git a/src/battle_dome.c b/src/battle_dome.c index 2f6df5dcaf..780721768a 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -33,7 +33,6 @@ #include "graphics.h" #include "constants/battle_dome.h" #include "constants/frontier_util.h" -#include "constants/species.h" #include "constants/moves.h" #include "constants/pokemon.h" #include "constants/trainers.h" @@ -864,7 +863,9 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 372, }, - // UB: No DUMMY_WIN_TEMPLATE at the array's end. + #ifdef UBFIX + DUMMY_WIN_TEMPLATE, + #endif }; static const struct ScanlineEffectParams sTourneyTreeScanlineEffectParams = @@ -2527,7 +2528,11 @@ static void CreateDomeOpponentMon(u8 monPartyId, u16 tournamentTrainerId, u8 tou { int i; u8 friendship = MAX_FRIENDSHIP; - u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using (DOME_TRAINERS[tournamentTrainerId].trainerId) instead of (tournamentTrainerId). As a result, all Pokemon have ivs of 3. + #ifdef BUGFIX + u8 fixedIv = GetDomeTrainerMonIvs(DOME_TRAINERS[tournamentTrainerId].trainerId); + #else + u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Using the wrong ID. As a result, all Pokemon have ivs of 3. + #endif u8 level = SetFacilityPtrsGetLevel(); CreateMonWithEVSpreadNatureOTID(&gEnemyParty[monPartyId], gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].species, @@ -2764,10 +2769,10 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) // BUG: TYPE_x2 is not necessary and makes the condition always false if the ability is wonder guard. if (TYPE_EFFECT_DEF_TYPE(i) == defType1) if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) - typePower = typePower * TYPE_EFFECT_MULTIPLIER(i) / 10; + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2) if ((defAbility == ABILITY_WONDER_GUARD && TYPE_EFFECT_MULTIPLIER(i) == TYPE_x2) || defAbility != ABILITY_WONDER_GUARD) - typePower = typePower * TYPE_EFFECT_MULTIPLIER(i) / 10; + typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10; } i += 3; } @@ -2778,10 +2783,10 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) case 0: switch (typePower) { - default: - case TYPE_x0: - case TYPE_x0_25: case TYPE_x0_50: + case TYPE_x0_25: + case TYPE_x0: + default: typePower = 0; break; case TYPE_x1: @@ -2798,19 +2803,19 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) case 1: switch (typePower) { - case TYPE_x0: - typePower = 8; + default: + case TYPE_x1: + typePower = 0; break; case TYPE_x0_25: typePower = 4; break; + case TYPE_x0: + typePower = 8; + break; case TYPE_x0_50: typePower = 2; break; - default: - case TYPE_x1: - typePower = 0; - break; case TYPE_x2: typePower = -2; break; @@ -2828,8 +2833,8 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) case TYPE_x0_25: typePower = -8; break; - default: case TYPE_x0_50: + default: typePower = 0; break; case TYPE_x1: @@ -2870,7 +2875,7 @@ static u8 GetDomeTrainerMonIvs(u16 trainerId) else if (trainerId <= FRONTIER_TRAINER_TESS) // 200 - 219 fixedIv = 21; else // 220+ (- 299) - fixedIv = 31; + fixedIv = MAX_PER_STAT_IVS; return fixedIv; } @@ -4305,7 +4310,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) textPrinter.currentY = textPrinter.y; textPrinter.letterSpacing = 2; textPrinter.lineSpacing = 0; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; @@ -4838,7 +4843,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) textPrinter.currentY = textPrinter.y; textPrinter.letterSpacing = 0; textPrinter.lineSpacing = 0; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; @@ -5336,7 +5341,7 @@ static void Task_ShowTourneyTree(u8 taskId) textPrinter.lineSpacing = 0; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x70, textPrinter.letterSpacing); textPrinter.currentY = 1; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; @@ -5517,7 +5522,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId) textPrinter.y = 0; textPrinter.letterSpacing = 2; textPrinter.lineSpacing = 0; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = TEXT_DYNAMIC_COLOR_2; textPrinter.bgColor = TEXT_COLOR_TRANSPARENT; textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; @@ -5965,6 +5970,10 @@ static void DecideRoundWinners(u8 roundId) else if (tournamentId2 != 0xFF) { // BUG: points1 and points2 are not cleared at the beginning of the loop resulting in not fair results. + #ifdef BUGFIX + points1 = 0; + points2 = 0; + #endif // Calculate points for both trainers. for (monId1 = 0; monId1 < FRONTIER_PARTY_SIZE; monId1++) diff --git a/src/battle_factory.c b/src/battle_factory.c index 940e71f7da..9ba13b0d32 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -8,7 +8,6 @@ #include "frontier_util.h" #include "battle_tower.h" #include "random.h" -#include "constants/species.h" #include "constants/battle_ai.h" #include "constants/battle_factory.h" #include "constants/battle_frontier.h" @@ -26,8 +25,8 @@ static void InitFactoryChallenge(void); static void GetBattleFactoryData(void); static void SetBattleFactoryData(void); static void SaveFactoryChallenge(void); -static void nullsub_75(void); -static void nullsub_123(void); +static void FactoryDummy1(void); +static void FactoryDummy2(void); static void SelectInitialRentalMons(void); static void SwapRentalMons(void); static void SetPerformedRentalSwap(void); @@ -42,8 +41,16 @@ static void RestorePlayerPartyHeldItems(void); static u16 GetFactoryMonId(u8 lvlMode, u8 challengeNum, bool8 arg2); static u8 GetMoveBattleStyle(u16 move); -// Const rom data. -static const u8 sRequiredMoveCounts[] = {3, 3, 3, 2, 2, 2, 2}; +// Number of moves needed on the team to be considered using a certain battle style +static const u8 sRequiredMoveCounts[FACTORY_NUM_STYLES - 1] = { + [FACTORY_STYLE_PREPARATION - 1] = 3, + [FACTORY_STYLE_SLOW_STEADY - 1] = 3, + [FACTORY_STYLE_ENDURANCE - 1] = 3, + [FACTORY_STYLE_HIGH_RISK - 1] = 2, + [FACTORY_STYLE_WEAKENING - 1] = 2, + [FACTORY_STYLE_UNPREDICTABLE - 1] = 2, + [FACTORY_STYLE_WEATHER - 1] = 2 +}; static const u16 sMoves_TotalPreparation[] = { @@ -120,8 +127,8 @@ static void (* const sBattleFactoryFunctions[])(void) = [BATTLE_FACTORY_FUNC_GET_DATA] = GetBattleFactoryData, [BATTLE_FACTORY_FUNC_SET_DATA] = SetBattleFactoryData, [BATTLE_FACTORY_FUNC_SAVE] = SaveFactoryChallenge, - [BATTLE_FACTORY_FUNC_NULL] = nullsub_75, - [BATTLE_FACTORY_FUNC_NULL2] = nullsub_123, + [BATTLE_FACTORY_FUNC_NULL] = FactoryDummy1, + [BATTLE_FACTORY_FUNC_NULL2] = FactoryDummy2, [BATTLE_FACTORY_FUNC_SELECT_RENT_MONS] = SelectInitialRentalMons, [BATTLE_FACTORY_FUNC_SWAP_RENT_MONS] = SwapRentalMons, [BATTLE_FACTORY_FUNC_SET_SWAPPED] = SetPerformedRentalSwap, @@ -208,7 +215,7 @@ static void InitFactoryChallenge(void) for (i = 0; i < 6; i++) gSaveBlock2Ptr->frontier.rentalMons[i].monId = 0xFFFF; for (i = 0; i < FRONTIER_PARTY_SIZE; i++) - gUnknown_03006298[i] = 0xFFFF; + gFrontierTempParty[i] = 0xFFFF; SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); gTrainerBattleOpponent_A = 0; @@ -267,12 +274,12 @@ static void SaveFactoryChallenge(void) SaveGameFrontier(); } -static void nullsub_75(void) +static void FactoryDummy1(void) { } -static void nullsub_123(void) +static void FactoryDummy2(void) { } @@ -356,7 +363,7 @@ static void GenerateOpponentMons(void) species[i] = gFacilityTrainerMons[monId].species; heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]; - gUnknown_03006298[i] = monId; + gFrontierTempParty[i] = monId; i++; } } @@ -377,11 +384,11 @@ static void SetRentalsToOpponentParty(void) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId = gUnknown_03006298[i]; - gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL); - gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL); - gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ABILITY_NUM, NULL); - SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gUnknown_03006298[i]].itemTableId]); + gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].monId = gFrontierTempParty[i]; + gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL); + gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL); + gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].abilityNum = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ABILITY_NUM, NULL); + SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gFrontierTempParty[i]].itemTableId]); } } @@ -456,13 +463,13 @@ static void SetPlayerAndOpponentParties(void) case 2: for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - monId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId; - ivs = gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs; + monId = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].monId; + ivs = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].ivs; CreateMon(&gEnemyParty[i], gFacilityTrainerMons[monId].species, monLevel, ivs, - TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality, + TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].personality, OT_ID_PLAYER_ID, 0); count = 0; @@ -485,7 +492,7 @@ static void SetPlayerAndOpponentParties(void) for (k = 0; k < MAX_MON_MOVES; k++) SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); - SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum); + SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].abilityNum); } break; } @@ -596,7 +603,7 @@ static void GetOpponentMostCommonMonType(void) typesCount[i] = 0; for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - u32 species = gFacilityTrainerMons[gUnknown_03006298[i]].species; + u32 species = gFacilityTrainerMons[gFrontierTempParty[i]].species; typesCount[gBaseStats[species].type1]++; if (gBaseStats[species].type1 != gBaseStats[species].type2) @@ -632,7 +639,7 @@ static void GetOpponentBattleStyle(void) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - u16 monId = gUnknown_03006298[i]; + u16 monId = gFrontierTempParty[i]; for (j = 0; j < MAX_MON_MOVES; j++) { u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monId].moves[j]); @@ -640,7 +647,7 @@ static void GetOpponentBattleStyle(void) } } - gSpecialVar_Result = 0; + gSpecialVar_Result = FACTORY_STYLE_NONE; for (i = 1; i < FACTORY_NUM_STYLES; i++) { if (stylePoints[i] >= sRequiredMoveCounts[i - 1]) diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index a3fa275c5c..86e3b02336 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -25,52 +25,77 @@ #include "util.h" #include "trainer_pokemon_sprites.h" #include "starter_choose.h" +#include "strings.h" +#include "graphics.h" #include "constants/battle_frontier.h" #include "constants/songs.h" #include "constants/rgb.h" -// Select_ refers to the first Pokemon selection screen where you choose 3 Pokemon. -// Swap_ refers to the consecutive selection screen where you can keep your Pokemon or swap one with beaten trainer's. +// Select_ refers to the first Pokemon selection screen where you choose your initial 3 rental Pokemon. +// Swap_ refers to the subsequent selection screens where you can swap a Pokemon with one from the beaten trainer -#define MENU_SUMMARY 0 -#define MENU_RENT 1 -#define MENU_DESELECT 1 -#define MENU_OTHERS 2 -#define MENU_OPTIONS_COUNT 3 +// Note that, generally, "Action" will refer to the immediate actions that can be taken on each screen, +// i.e. selecting a pokemon or selecting the Cancel button +// The "Options menu" will refer to the popup menu that shows when some actions have been selected + +#define SWAP_PLAYER_SCREEN 0 // The screen where the player selects which of their pokemon to swap away +#define SWAP_ENEMY_SCREEN 1 // The screen where the player selects which new pokemon from the defeated party to swap for #define SELECTABLE_MONS_COUNT 6 -#define TAG_PAL_BALL_GREY 0x64 -#define TAG_PAL_BALL_SELECTED 0x65 -#define TAG_PAL_66 0x66 -#define TAG_PAL_67 0x67 +enum { + PALTAG_BALL_GRAY = 100, + PALTAG_BALL_SELECTED, + PALTAG_INTERFACE, + PALTAG_MON_PIC_BG, +}; -#define TAG_TILE_64 0x64 -#define TAG_TILE_65 0x65 -#define TAG_TILE_66 0x66 -#define TAG_TILE_67 0x67 -#define TAG_TILE_68 0x68 -#define TAG_TILE_69 0x69 -#define TAG_TILE_6A 0x6A -#define TAG_TILE_6B 0x6B -#define TAG_TILE_6C 0x6C -#define TAG_TILE_6D 0x6D +enum { + GFXTAG_BALL = 100, + GFXTAG_ARROW, + GFXTAG_MENU_HIGHLIGHT_LEFT, + GFXTAG_MENU_HIGHLIGHT_RIGHT, + GFXTAG_ACTION_BOX_LEFT, + GFXTAG_ACTION_BOX_RIGHT, + GFXTAG_ACTION_HIGHLIGHT_LEFT, + GFXTAG_ACTION_HIGHLIGHT_MIDDLE, + GFXTAG_ACTION_HIGHLIGHT_RIGHT, + GFXTAG_MON_PIC_BG_ANIM, +}; -struct FactorySelecteableMon +// Tasks in this file universally use data[0] as a state for switches +#define tState data[0] + +// States for both Select/Swap versions of Task_FadeSpeciesName +enum { + FADESTATE_INIT, + FADESTATE_RUN, + FADESTATE_DELAY +}; + +// Return states for the Select Actions +enum { + SELECT_SUMMARY, + SELECT_CONTINUE_CHOOSING, + SELECT_CONFIRM_MONS, + SELECT_INVALID_MON, +}; + +struct FactorySelectableMon { u16 monId; - u16 spriteId; + u16 ballSpriteId; u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon struct Pokemon monData; }; -struct UnkFactoryStruct +struct FactoryMonPic { - u8 field0; - u8 field1; + u8 monSpriteId; + u8 bgSpriteId; }; -struct FactorySelectMonsStruct +struct FactorySelectScreen { u8 menuCursorPos; u8 menuCursor1SpriteId; @@ -80,206 +105,201 @@ struct FactorySelectMonsStruct u8 selectingMonsState; bool8 fromSummaryScreen; u8 yesNoCursorPos; - u8 unused8; - struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; - struct UnkFactoryStruct unk294[3]; - bool8 unk2A0; + u8 unused; + struct FactorySelectableMon mons[SELECTABLE_MONS_COUNT]; + struct FactoryMonPic monPics[FRONTIER_PARTY_SIZE]; // Array so all chosen mons can be shown at once + bool8 monPicAnimating; u8 fadeSpeciesNameTaskId; - bool8 unk2A2; - u16 unk2A4; - bool8 unk2A6; - u8 unk2A7; - u8 unk2A8; - u8 unk2A9; + bool8 fadeSpeciesNameActive; + u16 speciesNameColorBackup; + bool8 fadeSpeciesNameFadeOut; + u8 fadeSpeciesNameCoeffDelay; + u8 fadeSpeciesNameCoeff; + u8 faceSpeciesNameDelay; }; -// 'Action' refers to the 3 Selectable mons, Cancel, Pknm for swap windows. -#define ACTIONS_PLAYER_SCREEN 0 -#define ACTIONS_ENEMY_SCREEN 1 - -struct SwapActionIdAndFunc +struct SwapScreenAction { u8 id; void (*func)(u8 taskId); }; -struct FactorySwapMonsStruct +struct FactorySwapScreen { u8 menuCursorPos; u8 menuCursor1SpriteId; u8 menuCursor2SpriteId; u8 cursorPos; u8 cursorSpriteId; - u8 ballSpriteIds[3]; - u8 unk8[2][3]; - u8 unkE[2][2]; + u8 ballSpriteIds[FRONTIER_PARTY_SIZE]; + u8 pkmnForSwapButtonSpriteIds[2][3]; // For this and sprite ID array below, [0][i] is the button background, [1][i] is the button highlight + u8 cancelButtonSpriteIds[2][2]; u8 playerMonId; u8 enemyMonId; bool8 inEnemyScreen; bool8 fromSummaryScreen; u8 yesNoCursorPos; u8 actionsCount; - const struct SwapActionIdAndFunc *actionsData; - u8 unused1C[4]; + const struct SwapScreenAction *actionsData; + u8 unused[4]; bool8 monSwapped; u8 fadeSpeciesNameTaskId; - bool8 unk22; - u16 unk24; - bool8 unk26; - u8 unk27; - u8 unk28; - u8 unk29; - struct UnkFactoryStruct unk2C; - bool8 unk30; + bool8 fadeSpeciesNameActive; + u16 speciesNameColorBackup; + bool8 fadeSpeciesNameFadeOut; + u8 fadeSpeciesNameCoeffDelay; + u8 fadeSpeciesNameCoeff; + u8 faceSpeciesNameDelay; + struct FactoryMonPic monPic; + bool8 monPicAnimating; }; -// This file's functions. -static void sub_819A44C(struct Sprite *sprite); +static void SpriteCB_Pokeball(struct Sprite *); +static void SpriteCB_OpenMonPic(struct Sprite *); +static void OpenMonPic(u8 *, bool8 *, bool8); +static void HideMonPic(struct FactoryMonPic, bool8 *); +static void CloseMonPic(struct FactoryMonPic, bool8 *, bool8); +static void Task_OpenMonPic(u8); +static void Task_CloseMonPic(u8); + +// Select screen static void CB2_InitSelectScreen(void); -static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V); +static void Select_SetWinRegs(s16, s16, s16, s16); static void Select_InitMonsData(void); static void Select_InitAllSprites(void); -static void Select_ShowSummaryMonSprite(void); +static void Select_ReshowMonSprite(void); static void Select_PrintSelectMonString(void); static void Select_PrintMonSpecies(void); static void Select_PrintMonCategory(void); static void Select_PrintRentalPkmnString(void); static void Select_CopyMonsToPlayerParty(void); -static void sub_819C4B4(void); +static void Select_ShowChosenMons(void); static void Select_ShowYesNoOptions(void); -static void sub_819C568(void); +static void Select_HideChosenMons(void); static void Select_ShowMenuOptions(void); static void Select_PrintMenuOptions(void); static void Select_PrintYesNoOptions(void); -static void Task_SelectFadeSpeciesName(u8 taskId); -static void sub_819C1D0(u8 taskId); -static void Task_HandleSelectionScreenChooseMons(u8 taskId); -static void Task_HandleSelectionScreenMenu(u8 taskId); -static void CreateFrontierFactorySelectableMons(u8 firstMonId); -static void CreateTentFactorySelectableMons(u8 firstMonId); -static void Select_SetBallSpritePaletteNum(u8 id); -static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1); -static void sub_819B958(u8 windowId); -static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen); -static void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen); +static void Select_Task_FadeSpeciesName(u8); +static void Select_Task_OpenChosenMonPics(u8); +static void Select_Task_HandleChooseMons(u8); +static void Select_Task_HandleMenu(u8); +static void CreateFrontierFactorySelectableMons(u8); +static void CreateSlateportTentSelectableMons(u8); +static void Select_SetBallSpritePaletteNum(u8); +static void Select_ErasePopupMenu(u8); static u8 Select_RunMenuOptionFunc(void); -static u8 sub_819BC9C(void); +static u8 Select_DeclineChosenMons(void); static u8 Select_OptionSummary(void); static u8 Select_OptionOthers(void); static u8 Select_OptionRentDeselect(void); -static bool32 Select_AreSpeciesValid(u16 monId); +static bool32 Select_AreSpeciesValid(u16); + +// Swap screen +static void CB2_InitSwapScreen(void); static void Swap_DestroyAllSprites(void); static void Swap_ShowYesNoOptions(void); -static void sub_819E8EC(void); -static void sub_819EAC0(void); -static void Swap_UpdateYesNoCursorPosition(s8 direction); -static void Swap_UpdateMenuCursorPosition(s8 direction); -static void sub_819EA64(u8 windowId); -static void sub_819D770(u8 taskId); -static void Task_HandleSwapScreenChooseMons(u8 taskId); -static void sub_819D588(u8 taskId); -static void sub_819F7B4(u8 taskId); -static void Swap_PrintOnInfoWindow(const u8 *str); +static void Swap_HideActionButtonHighlights(void); +static void Swap_EraseSpeciesWindow(void); +static void Swap_UpdateYesNoCursorPosition(s8); +static void Swap_UpdateMenuCursorPosition(s8); +static void Swap_ErasePopupMenu(u8); +static void Swap_Task_ScreenInfoTransitionIn(u8); +static void Swap_Task_HandleChooseMons(u8); +static void Swap_Task_ScreenInfoTransitionOut(u8); +static void Swap_PrintOnInfoWindow(const u8 *); static void Swap_ShowMenuOptions(void); static void Swap_PrintMenuOptions(void); static void Swap_PrintYesNoOptions(void); static void Swap_PrintMonSpecies(void); -static void Swap_PrintMonSpecies2(void); -static void Swap_PrintMonSpecies3(void); +static void Swap_PrintMonSpeciesAtFade(void); +static void Swap_PrintMonSpeciesForTransition(void); static void Swap_PrintMonCategory(void); static void Swap_InitAllSprites(void); static void Swap_PrintPkmnSwap(void); -static void sub_819EADC(void); -static void sub_819EAF8(void); -static void CB2_InitSwapScreen(void); +static void Swap_EraseSpeciesAtFadeWindow(void); +static void Swap_EraseActionFadeWindow(void); static void Swap_ShowSummaryMonSprite(void); -static void Swap_UpdateActionCursorPosition(s8 direction); -static void Swap_UpdateBallCursorPosition(s8 direction); -static void Swap_RunMenuOptionFunc(u8 taskId); -static void sub_819F0CC(u8 taskId); -static void sub_819F114(u8 taskId); -static void sub_819F134(u8 taskId); -static void Swap_RunActionFunc(u8 taskId); -static void sub_819F69C(u8 taskId); -static void Task_SwapCantHaveSameMons(u8 taskId); -static void Swap_ShowMonSprite(void); +static void Swap_UpdateActionCursorPosition(s8); +static void Swap_UpdateBallCursorPosition(s8); +static void Swap_RunMenuOptionFunc(u8); +static void Swap_OptionSwap(u8); +static void Swap_OptionSummary(u8); +static void Swap_OptionRechoose(u8); +static void Swap_RunActionFunc(u8); +static void Swap_TaskCantHaveSameMons(u8); +static void Swap_CreateMonSprite(void); static void Swap_PrintActionStrings(void); static void Swap_PrintActionStrings2(void); -static void Swap_PrintOneActionString(u8 which); -static void Swap_InitActions(u8 id); -static void sub_819E838(u8 arg0); -static bool8 Swap_AlreadyHasSameSpecies(u8 monId); -static void sub_819F600(struct Sprite *sprite); -static void Swap_ActionMon(u8 taskId); -static void Swap_ActionCancel(u8 taskId); -static void Swap_ActionPkmnForSwap(u8 taskId); +static void Swap_PrintOneActionString(u8); +static void Swap_InitActions(u8); +static void Swap_HighlightActionButton(u8); +static bool8 Swap_AlreadyHasSameSpecies(u8); +static void Swap_ActionMon(u8); +static void Swap_ActionCancel(u8); +static void Swap_ActionPkmnForSwap(u8); -// Ewram variables static EWRAM_DATA u8 *sSelectMenuTilesetBuffer = NULL; -static EWRAM_DATA u8 *sSelectMonCardBgTilesetBuffer = NULL; +static EWRAM_DATA u8 *sSelectMonPicBgTilesetBuffer = NULL; static EWRAM_DATA u8 *sSelectMenuTilemapBuffer = NULL; -static EWRAM_DATA u8 *sSelectMonCardBgTilemapBuffer = NULL; +static EWRAM_DATA u8 *sSelectMonPicBgTilemapBuffer = NULL; static EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; static EWRAM_DATA u8 *sSwapMenuTilesetBuffer = NULL; -static EWRAM_DATA u8 *sSwapMonCardBgTilesetBuffer = NULL; +static EWRAM_DATA u8 *sSwapMonPicBgTilesetBuffer = NULL; static EWRAM_DATA u8 *sSwapMenuTilemapBuffer = NULL; -static EWRAM_DATA u8 *sSwapMonCardBgTilemapBuffer = NULL; +static EWRAM_DATA u8 *sSwapMonPicBgTilemapBuffer = NULL; -// IWRAM bss -static struct FactorySelectMonsStruct *sFactorySelectScreen; -static void (*sSwap_CurrentTableFunc)(u8 taskId); -static struct FactorySwapMonsStruct *sFactorySwapScreen; +static struct FactorySelectScreen *sFactorySelectScreen; +static void (*sSwap_CurrentOptionFunc)(u8 taskId); +static struct FactorySwapScreen *sFactorySwapScreen; -// IWRAM common -u8 (*gUnknown_030062E8)(void); +u8 (*gFactorySelect_CurrentOptionFunc)(void); -// Const rom data. -static const u16 gUnknown_0860F13C[] = INCBIN_U16("graphics/unknown/unknown_60F13C.gbapal"); -static const u16 gUnknown_0860F15C[] = INCBIN_U16("graphics/unknown/unknown_60F15C.gbapal"); -static const u16 gUnknown_0860F17C[] = INCBIN_U16("graphics/unknown/unknown_60F17C.gbapal"); -static const u8 gUnknown_0860F1BC[] = INCBIN_U8("graphics/unknown/unknown_60F1BC.4bpp"); -static const u8 gUnknown_0860F3BC[] = INCBIN_U8("graphics/unknown/unknown_60F3BC.4bpp"); -static const u8 gUnknown_0860F43C[] = INCBIN_U8("graphics/unknown/unknown_60F43C.4bpp"); -static const u8 gUnknown_0860F53C[] = INCBIN_U8("graphics/unknown/unknown_60F53C.4bpp"); -static const u8 gUnknown_0860F63C[] = INCBIN_U8("graphics/unknown/unknown_60F63C.4bpp"); -static const u8 gUnknown_0860F6BC[] = INCBIN_U8("graphics/unknown/unknown_60F6BC.4bpp"); -static const u8 gUnknown_0860F7BC[] = INCBIN_U8("graphics/unknown/unknown_60F7BC.4bpp"); -static const u8 gUnknown_0860F83C[] = INCBIN_U8("graphics/unknown/unknown_60F83C.4bpp"); -static const u8 gUnknown_0860F93C[] = INCBIN_U8("graphics/unknown/unknown_60F93C.4bpp"); -static const u8 gUnknown_0860FA3C[] = INCBIN_U8("graphics/unknown/unknown_60FA3C.4bpp"); -static const u8 gUnknown_0861023C[] = INCBIN_U8("graphics/unknown/unknown_61023C.bin"); -static const u8 gUnknown_0861033C[] = INCBIN_U8("graphics/unknown/unknown_61033C.4bpp"); -static const u16 gUnknown_0861039C[] = INCBIN_U16("graphics/unknown/unknown_61039C.gbapal"); +static const u16 sPokeballGray_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/pokeball_gray.gbapal"); +static const u16 sPokeballSelected_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/pokeball_selected.gbapal"); +static const u16 sInterface_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/interface.gbapal"); // Arrow, menu/action highlights, action box, etc +static const u8 sPokeball_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/pokeball.4bpp"); // Unused, gPokeballSelection_Gfx used instead +static const u8 sArrow_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/arrow.4bpp"); +static const u8 sMenuHighlightLeft_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/menu_highlight_left.4bpp"); +static const u8 sMenuHighlightRight_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/menu_highlight_right.4bpp"); +static const u8 sActionBoxLeft_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_box_left.4bpp"); +static const u8 sActionBoxRight_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_box_right.4bpp"); +static const u8 sActionHighlightLeft_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_highlight_left.4bpp"); +static const u8 sActionHighlightMiddle_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_highlight_middle.4bpp"); +static const u8 sActionHighlightRight_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/action_highlight_right.4bpp"); +static const u8 sMonPicBgAnim_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg_anim.4bpp"); +static const u8 sMonPicBg_Tilemap[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg.bin"); +static const u8 sMonPicBg_Gfx[] = INCBIN_U8( "graphics/battle_frontier/factory_screen/mon_pic_bg.4bpp"); +static const u16 sMonPicBg_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/mon_pic_bg.gbapal"); -static const struct SpriteSheet gUnknown_086103BC[] = +static const struct SpriteSheet sSelect_SpriteSheets[] = { - {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, - {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, - {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, - {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, + {sArrow_Gfx, sizeof(sArrow_Gfx), GFXTAG_ARROW}, + {sMenuHighlightLeft_Gfx, sizeof(sMenuHighlightLeft_Gfx), GFXTAG_MENU_HIGHLIGHT_LEFT}, + {sMenuHighlightRight_Gfx, sizeof(sMenuHighlightRight_Gfx), GFXTAG_MENU_HIGHLIGHT_RIGHT}, + {sMonPicBgAnim_Gfx, sizeof(sMonPicBgAnim_Gfx), GFXTAG_MON_PIC_BG_ANIM}, {}, }; -static const struct CompressedSpriteSheet gUnknown_086103E4[] = +static const struct CompressedSpriteSheet sSelect_BallGfx[] = { - {gPokeballSelection_Gfx, 0x800, TAG_TILE_64}, + {gPokeballSelection_Gfx, 0x800, GFXTAG_BALL}, {}, }; -static const struct SpritePalette gUnknown_086103F4[] = +static const struct SpritePalette sSelect_SpritePalettes[] = { - {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, - {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, - {gUnknown_0860F17C, TAG_PAL_66}, - {gUnknown_0861039C, TAG_PAL_67}, + {sPokeballGray_Pal, PALTAG_BALL_GRAY}, + {sPokeballSelected_Pal, PALTAG_BALL_SELECTED}, + {sInterface_Pal, PALTAG_INTERFACE}, + {sMonPicBg_Pal, PALTAG_MON_PIC_BG}, {}, }; u8 static (* const sSelect_MenuOptionFuncs[])(void) = { - [MENU_SUMMARY] = Select_OptionSummary, - [MENU_RENT] /*Or Deselect*/ = Select_OptionRentDeselect, - [MENU_OTHERS] = Select_OptionOthers + Select_OptionSummary, + Select_OptionRentDeselect, + Select_OptionOthers }; static const struct BgTemplate sSelect_BgTemplates[] = @@ -313,9 +333,18 @@ static const struct BgTemplate sSelect_BgTemplates[] = }, }; +enum { + SELECT_WIN_TITLE, + SELECT_WIN_SPECIES, + SELECT_WIN_INFO, + SELECT_WIN_OPTIONS, + SELECT_WIN_YES_NO, + SELECT_WIN_MON_CATEGORY, +}; + static const struct WindowTemplate sSelect_WindowTemplates[] = { - { + [SELECT_WIN_TITLE] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 2, @@ -324,7 +353,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x0001, }, - { + [SELECT_WIN_SPECIES] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 2, @@ -333,7 +362,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x0019, }, - { + [SELECT_WIN_INFO] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 15, @@ -342,7 +371,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x002f, }, - { + [SELECT_WIN_OPTIONS] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 14, @@ -351,7 +380,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x006b, }, - { + [SELECT_WIN_YES_NO] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 14, @@ -360,7 +389,7 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x009b, }, - { + [SELECT_WIN_MON_CATEGORY] = { .bg = 0, .tilemapLeft = 15, .tilemapTop = 0, @@ -372,12 +401,11 @@ static const struct WindowTemplate sSelect_WindowTemplates[] = DUMMY_WIN_TEMPLATE, }; -static const u16 gUnknown_0861046C[] = INCBIN_U16("graphics/unknown/unknown_61046C.gbapal"); - +static const u16 sSelectText_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/text.gbapal"); static const u8 sMenuOptionTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_TRANSPARENT}; static const u8 sSpeciesNameTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_TRANSPARENT}; -static const struct OamData gUnknown_0861047C = +static const struct OamData sOam_Select_Pokeball = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -394,7 +422,7 @@ static const struct OamData gUnknown_0861047C = .affineParam = 0, }; -static const struct OamData gUnknown_08610484 = +static const struct OamData sOam_Select_Arrow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -411,7 +439,7 @@ static const struct OamData gUnknown_08610484 = .affineParam = 0, }; -static const struct OamData gUnknown_0861048C = +static const struct OamData sOam_Select_MenuHighlight = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -428,7 +456,7 @@ static const struct OamData gUnknown_0861048C = .affineParam = 0, }; -static const struct OamData gUnknown_08610494 = +static const struct OamData sOam_Select_MonPicBgAnim = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -445,25 +473,25 @@ static const struct OamData gUnknown_08610494 = .affineParam = 1, }; -static const union AnimCmd gUnknown_0861049C[] = +static const union AnimCmd sAnim_Select_Interface[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd gUnknown_086104A4[] = +static const union AnimCmd sAnim_Select_MonPicBgAnim[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd gUnknown_086104AC[] = +static const union AnimCmd sAnim_Select_Pokeball_Still[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd gUnknown_086104B4[] = +static const union AnimCmd sAnim_Select_Pokeball_Moving[] = { ANIMCMD_FRAME(16, 4), ANIMCMD_FRAME(0, 4), @@ -485,20 +513,20 @@ static const union AnimCmd gUnknown_086104B4[] = ANIMCMD_END, }; -static const union AnimCmd * const gUnknown_086104FC[] = +static const union AnimCmd * const sAnims_Select_Interface[] = { - gUnknown_0861049C, + sAnim_Select_Interface, }; -static const union AnimCmd * const gUnknown_08610500[] = +static const union AnimCmd * const sAnims_Select_MonPicBgAnim[] = { - gUnknown_086104A4, + sAnim_Select_MonPicBgAnim, }; -static const union AnimCmd * const gUnknown_08610504[] = +static const union AnimCmd * const sAnims_Select_Pokeball[] = { - gUnknown_086104AC, - gUnknown_086104B4, + sAnim_Select_Pokeball_Still, + sAnim_Select_Pokeball_Moving, }; static const union AffineAnimCmd gUnknown_0861050C[] = @@ -537,98 +565,98 @@ static const union AffineAnimCmd gUnknown_086105BC[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd * const gUnknown_086105CC[] = +static const union AffineAnimCmd * const sAffineAnims_Select_MonPicBgAnim[] = { gUnknown_0861050C, gUnknown_0861056C, gUnknown_086105BC, }; -static const struct SpriteTemplate gUnknown_086105D8 = +static const struct SpriteTemplate sSpriteTemplate_Select_Pokeball = { - .tileTag = TAG_TILE_64, - .paletteTag = TAG_PAL_BALL_GREY, - .oam = &gUnknown_0861047C, - .anims = gUnknown_08610504, + .tileTag = GFXTAG_BALL, + .paletteTag = PALTAG_BALL_GRAY, + .oam = &sOam_Select_Pokeball, + .anims = sAnims_Select_Pokeball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_819A44C + .callback = SpriteCB_Pokeball }; -static const struct SpriteTemplate gUnknown_086105F0 = +static const struct SpriteTemplate sSpriteTemplate_Select_Arrow = { - .tileTag = TAG_TILE_65, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_08610484, - .anims = gUnknown_086104FC, + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Select_Arrow, + .anims = sAnims_Select_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610608 = +static const struct SpriteTemplate sSpriteTemplate_Select_MenuHighlightLeft = { - .tileTag = TAG_TILE_66, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_0861048C, - .anims = gUnknown_086104FC, + .tileTag = GFXTAG_MENU_HIGHLIGHT_LEFT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Select_MenuHighlight, + .anims = sAnims_Select_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610620 = +static const struct SpriteTemplate sSpriteTemplate_Select_MenuHighlightRight = { - .tileTag = TAG_TILE_67, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_0861048C, - .anims = gUnknown_086104FC, + .tileTag = GFXTAG_MENU_HIGHLIGHT_RIGHT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Select_MenuHighlight, + .anims = sAnims_Select_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610638 = +static const struct SpriteTemplate sSpriteTemplate_Select_MonPicBgAnim = { - .tileTag = TAG_TILE_6D, - .paletteTag = TAG_PAL_67, - .oam = &gUnknown_08610494, - .anims = gUnknown_08610500, + .tileTag = GFXTAG_MON_PIC_BG_ANIM, + .paletteTag = PALTAG_MON_PIC_BG, + .oam = &sOam_Select_MonPicBgAnim, + .anims = sAnims_Select_MonPicBgAnim, .images = NULL, - .affineAnims = gUnknown_086105CC, + .affineAnims = sAffineAnims_Select_MonPicBgAnim, .callback = SpriteCallbackDummy }; -static const struct SpriteSheet gUnknown_08610650[] = +static const struct SpriteSheet sSwap_SpriteSheets[] = { - {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, - {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, - {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, - {gUnknown_0860F63C, sizeof(gUnknown_0860F63C), TAG_TILE_68}, - {gUnknown_0860F6BC, sizeof(gUnknown_0860F6BC), TAG_TILE_69}, - {gUnknown_0860F7BC, 0x100, TAG_TILE_6A}, - {gUnknown_0860F83C, sizeof(gUnknown_0860F83C), TAG_TILE_6B}, - {gUnknown_0860F93C, sizeof(gUnknown_0860F93C), TAG_TILE_6C}, - {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, + {sArrow_Gfx, sizeof(sArrow_Gfx), GFXTAG_ARROW}, + {sMenuHighlightLeft_Gfx, sizeof(sMenuHighlightLeft_Gfx), GFXTAG_MENU_HIGHLIGHT_LEFT}, + {sMenuHighlightRight_Gfx, sizeof(sMenuHighlightRight_Gfx), GFXTAG_MENU_HIGHLIGHT_RIGHT}, + {sActionBoxLeft_Gfx, sizeof(sActionBoxLeft_Gfx), GFXTAG_ACTION_BOX_LEFT}, + {sActionBoxRight_Gfx, sizeof(sActionBoxRight_Gfx), GFXTAG_ACTION_BOX_RIGHT}, + {sActionHighlightLeft_Gfx, 0x100, GFXTAG_ACTION_HIGHLIGHT_LEFT}, + {sActionHighlightMiddle_Gfx, sizeof(sActionHighlightMiddle_Gfx), GFXTAG_ACTION_HIGHLIGHT_MIDDLE}, + {sActionHighlightRight_Gfx, sizeof(sActionHighlightRight_Gfx), GFXTAG_ACTION_HIGHLIGHT_RIGHT}, + {sMonPicBgAnim_Gfx, sizeof(sMonPicBgAnim_Gfx), GFXTAG_MON_PIC_BG_ANIM}, {}, }; -static const struct CompressedSpriteSheet gUnknown_086106A0[] = +static const struct CompressedSpriteSheet sSwap_BallGfx[] = { - {gPokeballSelection_Gfx, 0x800, TAG_TILE_64}, + {gPokeballSelection_Gfx, 0x800, GFXTAG_BALL}, {}, }; -static const struct SpritePalette gUnknown_086106B0[] = +static const struct SpritePalette sSwap_SpritePalettes[] = { - {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, - {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, - {gUnknown_0860F17C, TAG_PAL_66}, - {gUnknown_0861039C, TAG_PAL_67}, + {sPokeballGray_Pal, PALTAG_BALL_GRAY}, + {sPokeballSelected_Pal, PALTAG_BALL_SELECTED}, + {sInterface_Pal, PALTAG_INTERFACE}, + {sMonPicBg_Pal, PALTAG_MON_PIC_BG}, {}, }; -static const struct OamData gUnknown_086106D8 = +static const struct OamData sOam_Swap_Pokeball = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -645,7 +673,7 @@ static const struct OamData gUnknown_086106D8 = .affineParam = 0, }; -static const struct OamData gUnknown_086106E0 = +static const struct OamData sOam_Swap_Arrow = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -662,7 +690,7 @@ static const struct OamData gUnknown_086106E0 = .affineParam = 0, }; -static const struct OamData gUnknown_086106E8 = +static const struct OamData sOam_Swap_MenuHighlight = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -679,7 +707,7 @@ static const struct OamData gUnknown_086106E8 = .affineParam = 0, }; -static const struct OamData gUnknown_086106F0 = +static const struct OamData sOam_Swap_MonPicBgAnim = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -696,25 +724,25 @@ static const struct OamData gUnknown_086106F0 = .affineParam = 1, }; -static const union AnimCmd gUnknown_086106F8[] = +static const union AnimCmd sAnim_Swap_Interface[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd gUnknown_08610700[] = +static const union AnimCmd sAnim_Swap_MonPicBgAnim[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -static const union AnimCmd gUnknown_08610708[] = +static const union AnimCmd sAnim_Swap_Pokeball_Still[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -static const union AnimCmd gUnknown_08610710[] = +static const union AnimCmd sAnim_Swap_Pokeball_Moving[] = { ANIMCMD_FRAME(16, 4), ANIMCMD_FRAME(0, 4), @@ -736,20 +764,20 @@ static const union AnimCmd gUnknown_08610710[] = ANIMCMD_END, }; -static const union AnimCmd * const gUnknown_08610758[] = +static const union AnimCmd * const sAnims_Swap_Interface[] = { - gUnknown_086106F8, + sAnim_Swap_Interface, }; -static const union AnimCmd * const gUnknown_0861075C[] = +static const union AnimCmd * const sAnims_Swap_MonPicBgAnim[] = { - gUnknown_08610700, + sAnim_Swap_MonPicBgAnim, }; -static const union AnimCmd * const gUnknown_08610760[] = +static const union AnimCmd * const sAnims_Swap_Pokeball[] = { - gUnknown_08610708, - gUnknown_08610710, + sAnim_Swap_Pokeball_Still, + sAnim_Swap_Pokeball_Moving, }; static const union AffineAnimCmd gUnknown_08610768[] = @@ -788,73 +816,73 @@ static const union AffineAnimCmd gUnknown_08610818[] = AFFINEANIMCMD_END, }; -static const union AffineAnimCmd * const gUnknown_08610828[] = +static const union AffineAnimCmd * const sAffineAnims_Swap_MonPicBgAnim[] = { gUnknown_08610768, gUnknown_086107C8, gUnknown_08610818, }; -static const struct SpriteTemplate gUnknown_08610834 = +static const struct SpriteTemplate sSpriteTemplate_Swap_Pokeball = { - .tileTag = TAG_TILE_64, - .paletteTag = TAG_PAL_BALL_GREY, - .oam = &gUnknown_086106D8, - .anims = gUnknown_08610760, + .tileTag = GFXTAG_BALL, + .paletteTag = PALTAG_BALL_GRAY, + .oam = &sOam_Swap_Pokeball, + .anims = sAnims_Swap_Pokeball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_819A44C + .callback = SpriteCB_Pokeball }; -static const struct SpriteTemplate gUnknown_0861084C = +static const struct SpriteTemplate sSpriteTemplate_Swap_Arrow = { - .tileTag = TAG_TILE_65, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E0, - .anims = gUnknown_08610758, + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Swap_Arrow, + .anims = sAnims_Swap_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610864 = +static const struct SpriteTemplate sSpriteTemplate_Swap_MenuHighlightLeft = { - .tileTag = TAG_TILE_66, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E8, - .anims = gUnknown_08610758, + .tileTag = GFXTAG_MENU_HIGHLIGHT_LEFT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Swap_MenuHighlight, + .anims = sAnims_Swap_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_0861087C = +static const struct SpriteTemplate sSpriteTemplate_Swap_MenuHighlightRight = { - .tileTag = TAG_TILE_67, - .paletteTag = TAG_PAL_66, - .oam = &gUnknown_086106E8, - .anims = gUnknown_08610758, + .tileTag = GFXTAG_MENU_HIGHLIGHT_RIGHT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_Swap_MenuHighlight, + .anims = sAnims_Swap_Interface, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_08610894 = +static const struct SpriteTemplate sSpriteTemplate_Swap_MonPicBgAnim = { - .tileTag = TAG_TILE_6D, - .paletteTag = TAG_PAL_67, - .oam = &gUnknown_086106F0, - .anims = gUnknown_0861075C, + .tileTag = GFXTAG_MON_PIC_BG_ANIM, + .paletteTag = PALTAG_MON_PIC_BG, + .oam = &sOam_Swap_MonPicBgAnim, + .anims = sAnims_Swap_MonPicBgAnim, .images = NULL, - .affineAnims = gUnknown_08610828, + .affineAnims = sAffineAnims_Swap_MonPicBgAnim, .callback = SpriteCallbackDummy }; void static (* const sSwap_MenuOptionFuncs[])(u8 taskId) = { - sub_819F114, - sub_819F0CC, - sub_819F134, + Swap_OptionSummary, + Swap_OptionSwap, + Swap_OptionRechoose, }; static const struct BgTemplate sSwap_BgTemplates[4] = @@ -897,9 +925,21 @@ static const struct BgTemplate sSwap_BgTemplates[4] = }, }; +enum { + SWAP_WIN_TITLE, + SWAP_WIN_SPECIES, + SWAP_WIN_INFO, + SWAP_WIN_OPTIONS, + SWAP_WIN_YES_NO, + SWAP_WIN_ACTION_FADE, // Used for action text fading out during screen transition + SWAP_WIN_UNUSED, + SWAP_WIN_SPECIES_AT_FADE, // Used to print species name stopped at current fade level + SWAP_WIN_MON_CATEGORY, +}; + static const struct WindowTemplate sSwap_WindowTemplates[] = { - { + [SWAP_WIN_TITLE] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 2, @@ -908,7 +948,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x0001, }, - { + [SWAP_WIN_SPECIES] = { .bg = 2, .tilemapLeft = 19, .tilemapTop = 2, @@ -917,7 +957,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x0019, }, - { + [SWAP_WIN_INFO] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 15, @@ -926,7 +966,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x002f, }, - { + [SWAP_WIN_OPTIONS] = { .bg = 0, .tilemapLeft = 21, .tilemapTop = 14, @@ -935,7 +975,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x006b, }, - { + [SWAP_WIN_YES_NO] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 14, @@ -944,7 +984,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x00a1, }, - { + [SWAP_WIN_ACTION_FADE] = { .bg = 2, .tilemapLeft = 21, .tilemapTop = 15, @@ -953,7 +993,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x006b, }, - { + [SWAP_WIN_UNUSED] = { .bg = 2, .tilemapLeft = 10, .tilemapTop = 2, @@ -962,7 +1002,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 14, .baseBlock = 0x00c1, }, - { + [SWAP_WIN_SPECIES_AT_FADE] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 2, @@ -971,7 +1011,7 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = .paletteNum = 15, .baseBlock = 0x00c9, }, - { + [SWAP_WIN_MON_CATEGORY] = { .bg = 0, .tilemapLeft = 15, .tilemapTop = 0, @@ -983,64 +1023,36 @@ static const struct WindowTemplate sSwap_WindowTemplates[] = DUMMY_WIN_TEMPLATE, }; -static const u16 gUnknown_08610918[] = {RGB_BLACK, RGB_BLACK, RGB_WHITE, RGB_BLACK, RGB_RED}; // Palette. +static const u16 sSwapText_Pal[] = INCBIN_U16("graphics/battle_frontier/factory_screen/text.gbapal"); // Identical to sSelectText_Pal static const u8 sSwapMenuOptionsTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_TRANSPARENT}; static const u8 sSwapSpeciesNameTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_TRANSPARENT}; -static const struct SwapActionIdAndFunc sSwap_PlayerScreenActions[] = +#define SWAPACTION_MON 1 +#define SWAPACTION_PKMN_FOR_SWAP 2 +#define SWAPACTION_CANCEL 3 + +static const struct SwapScreenAction sSwap_PlayerScreenActions[] = { - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {3, Swap_ActionCancel}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_CANCEL, .func = Swap_ActionCancel}, }; -static const struct SwapActionIdAndFunc sSwap_EnemyScreenActions[] = +static const struct SwapScreenAction sSwap_EnemyScreenActions[] = { - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {1, Swap_ActionMon}, - {2, Swap_ActionPkmnForSwap}, - {3, Swap_ActionCancel}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_MON, .func = Swap_ActionMon}, + {.id = SWAPACTION_PKMN_FOR_SWAP, .func = Swap_ActionPkmnForSwap}, + {.id = SWAPACTION_CANCEL, .func = Swap_ActionCancel}, }; -// gfx -extern const u8 gFrontierFactorySelectMenu_Gfx[]; -extern const u8 gFrontierFactorySelectMenu_Tilemap[]; -extern const u16 gFrontierFactorySelectMenu_Pal[]; - -// text -extern const u8 gText_RentalPkmn2[]; -extern const u8 gText_SelectFirstPkmn[]; -extern const u8 gText_SelectSecondPkmn[]; -extern const u8 gText_SelectThirdPkmn[]; -extern const u8 gText_TheseThreePkmnOkay[]; -extern const u8 gText_CantSelectSamePkmn[]; -extern const u8 gText_Summary[]; -extern const u8 gText_Rechoose[]; -extern const u8 gText_Deselect[]; -extern const u8 gText_Rent[]; -extern const u8 gText_Others2[]; -extern const u8 gText_Yes2[]; -extern const u8 gText_Yes3[]; -extern const u8 gText_No2[]; -extern const u8 gText_No3[]; -extern const u8 gText_QuitSwapping[]; -extern const u8 gText_AcceptThisPkmn[]; -extern const u8 gText_SelectPkmnToAccept[]; -extern const u8 gText_SelectPkmnToSwap[]; -extern const u8 gText_PkmnSwap[]; -extern const u8 gText_Swap[]; -extern const u8 gText_Summary2[]; -extern const u8 gText_PkmnForSwap[]; -extern const u8 gText_SamePkmnInPartyAlready[]; -extern const u8 gText_Cancel3[]; - -// code -static void sub_819A44C(struct Sprite *sprite) +static void SpriteCB_Pokeball(struct Sprite *sprite) { - if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED)) + if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED)) { + // Pokeball selected, do rocking animation if (sprite->animEnded) { if (sprite->data[0] != 0) @@ -1064,11 +1076,12 @@ static void sub_819A44C(struct Sprite *sprite) } else { + // Pokeball not selected, remain still StartSpriteAnimIfDifferent(sprite, 0); } } -static void Select_CB2(void) +static void CB2_SelectScreen(void) { AnimateSprites(); BuildOamBuffer(); @@ -1077,7 +1090,7 @@ static void Select_CB2(void) RunTasks(); } -static void Select_VblankCb(void) +static void VBlankCB_SelectScreen(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -1090,6 +1103,27 @@ void DoBattleFactorySelectScreen(void) SetMainCallback2(CB2_InitSelectScreen); } +// Main select states +// States for the main tasks of the Select_ functions after initialization, including: +// Select_Task_OpenSummaryScreen, Select_Task_HandleYesNo, Select_Task_HandleMenu, and Select_Task_HandleChooseMons +// Unnecessarily complicated, could easily have just kept states numbered in each task always starting at 0 +// There's only one instance (Select_Task_HandleChooseMons) where a non-initial case is used +// Select_Task_Exit has its own straightforward states +#define STATE_CHOOSE_MONS_INIT 0 +#define STATE_CHOOSE_MONS_HANDLE_INPUT 1 +#define STATE_MENU_INIT 2 +#define STATE_MENU_HANDLE_INPUT 3 +#define STATE_YESNO_SHOW_OPTIONS 4 +#define STATE_YESNO_HANDLE_INPUT 5 +#define STATE_SUMMARY_FADE 6 +#define STATE_SUMMARY_CLEAN 7 +#define STATE_SUMMARY_SHOW 8 +#define STATE_MENU_SHOW_OPTIONS 9 +#define STATE_YESNO_SHOW_MONS 10 +#define STATE_CHOOSE_MONS_INVALID 11 +#define STATE_MENU_REINIT 12 +#define STATE_MENU_RESHOW 13 + static void CB2_InitSelectScreen(void) { u8 taskId; @@ -1110,9 +1144,9 @@ static void CB2_InitSelectScreen(void) break; case 1: sSelectMenuTilesetBuffer = Alloc(0x440); - sSelectMonCardBgTilesetBuffer = AllocZeroed(0x440); - sSelectMenuTilemapBuffer = Alloc(0x800); - sSelectMonCardBgTilemapBuffer = AllocZeroed(0x800); + sSelectMonPicBgTilesetBuffer = AllocZeroed(0x440); + sSelectMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); + sSelectMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -1137,37 +1171,45 @@ static void CB2_InitSelectScreen(void) ResetTasks(); FreeAllSpritePalettes(); CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSelectMenuTilesetBuffer, 0x440); - CpuCopy16(gUnknown_0861033C, sSelectMonCardBgTilesetBuffer, 0x60); + CpuCopy16(sMonPicBg_Gfx, sSelectMonPicBgTilesetBuffer, 0x60); LoadBgTiles(1, sSelectMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSelectMonCardBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, 0x800); - LoadBgTilemap(1, sSelectMenuTilemapBuffer, 0x800, 0); + LoadBgTiles(3, sSelectMonPicBgTilesetBuffer, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE); + LoadBgTilemap(1, sSelectMenuTilemapBuffer, BG_SCREEN_SIZE, 0); LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(gUnknown_0861046C, 0xF0, 8); - LoadPalette(gUnknown_0861046C, 0xE0, 10); + LoadPalette(sSelectText_Pal, 0xF0, 8); + LoadPalette(sSelectText_Pal, 0xE0, 10); +#ifdef UBFIX + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) +#else if (sFactorySelectScreen->fromSummaryScreen == TRUE) - gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; - LoadPalette(gUnknown_0861039C, 0x20, 4); +#endif + gPlttBufferUnfaded[228] = sFactorySelectScreen->speciesNameColorBackup; + LoadPalette(sMonPicBg_Pal, 0x20, 4); gMain.state++; break; case 3: - SetBgTilemapBuffer(3, sSelectMonCardBgTilemapBuffer); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 2, 4, 8, 8); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 20, 4, 8, 8); + SetBgTilemapBuffer(3, sSelectMonPicBgTilemapBuffer); + CopyToBgTilemapBufferRect(3, sMonPicBg_Tilemap, 11, 4, 8, 8); + CopyToBgTilemapBufferRect(3, sMonPicBg_Tilemap, 2, 4, 8, 8); + CopyToBgTilemapBufferRect(3, sMonPicBg_Tilemap, 20, 4, 8, 8); CopyBgTilemapBufferToVram(3); gMain.state++; break; case 4: - LoadSpritePalettes(gUnknown_086103F4); - LoadSpriteSheets(gUnknown_086103BC); - LoadCompressedSpriteSheet(gUnknown_086103E4); + LoadSpritePalettes(sSelect_SpritePalettes); + LoadSpriteSheets(sSelect_SpriteSheets); + LoadCompressedSpriteSheet(sSelect_BallGfx); ShowBg(0); ShowBg(1); - SetVBlankCallback(Select_VblankCb); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + SetVBlankCallback(VBlankCB_SelectScreen); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); +#ifdef UBFIX + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) +#else if (sFactorySelectScreen->fromSummaryScreen == TRUE) +#endif { Select_SetWinRegs(88, 152, 32, 96); ShowBg(3); @@ -1181,50 +1223,54 @@ static void CB2_InitSelectScreen(void) gMain.state++; break; case 5: +#ifdef UBFIX + if (sFactorySelectScreen && sFactorySelectScreen->fromSummaryScreen) +#else if (sFactorySelectScreen->fromSummaryScreen == TRUE) +#endif sFactorySelectScreen->cursorPos = gLastViewedMonIndex; Select_InitMonsData(); Select_InitAllSprites(); if (sFactorySelectScreen->fromSummaryScreen == TRUE) - Select_ShowSummaryMonSprite(); + Select_ReshowMonSprite(); gMain.state++; break; case 6: Select_PrintSelectMonString(); - PutWindowTilemap(2); + PutWindowTilemap(SELECT_WIN_INFO); gMain.state++; break; case 7: Select_PrintMonCategory(); - PutWindowTilemap(5); + PutWindowTilemap(SELECT_WIN_MON_CATEGORY); gMain.state++; break; case 8: Select_PrintMonSpecies(); - PutWindowTilemap(1); + PutWindowTilemap(SELECT_WIN_SPECIES); gMain.state++; break; case 9: Select_PrintRentalPkmnString(); - PutWindowTilemap(0); + PutWindowTilemap(SELECT_WIN_TITLE); gMain.state++; break; case 10: - sFactorySelectScreen->fadeSpeciesNameTaskId = CreateTask(Task_SelectFadeSpeciesName, 0); + sFactorySelectScreen->fadeSpeciesNameTaskId = CreateTask(Select_Task_FadeSpeciesName, 0); if (!sFactorySelectScreen->fromSummaryScreen) { - gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 0; - taskId = CreateTask(Task_HandleSelectionScreenChooseMons, 0); - gTasks[taskId].data[0] = 0; + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = FADESTATE_INIT; + taskId = CreateTask(Select_Task_HandleChooseMons, 0); + gTasks[taskId].tState = STATE_CHOOSE_MONS_INIT; } else { - gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 1; - sFactorySelectScreen->unk2A2 = FALSE; - taskId = CreateTask(Task_HandleSelectionScreenMenu, 0); - gTasks[taskId].data[0] = 13; + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].tState = FADESTATE_RUN; + sFactorySelectScreen->fadeSpeciesNameActive = FALSE; + taskId = CreateTask(Select_Task_HandleMenu, 0); + gTasks[taskId].tState = STATE_MENU_RESHOW; } - SetMainCallback2(Select_CB2); + SetMainCallback2(CB2_SelectScreen); break; } } @@ -1246,7 +1292,7 @@ static void Select_InitMonsData(void) if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) CreateFrontierFactorySelectableMons(0); else - CreateTentFactorySelectableMons(0); + CreateSlateportTentSelectableMons(0); } static void Select_InitAllSprites(void) @@ -1256,15 +1302,15 @@ static void Select_InitAllSprites(void) for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { - sFactorySelectScreen->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); - gSprites[sFactorySelectScreen->mons[i].spriteId].data[0] = 0; + sFactorySelectScreen->mons[i].ballSpriteId = CreateSprite(&sSpriteTemplate_Select_Pokeball, (35 * i) + 32, 64, 1); + gSprites[sFactorySelectScreen->mons[i].ballSpriteId].data[0] = 0; Select_SetBallSpritePaletteNum(i); } cursorPos = sFactorySelectScreen->cursorPos; - x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; - sFactorySelectScreen->cursorSpriteId = CreateSprite(&gUnknown_086105F0, x, 88, 0); - sFactorySelectScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610608, 176, 112, 0); - sFactorySelectScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_08610620, 176, 144, 0); + x = gSprites[sFactorySelectScreen->mons[cursorPos].ballSpriteId].pos1.x; + sFactorySelectScreen->cursorSpriteId = CreateSprite(&sSpriteTemplate_Select_Arrow, x, 88, 0); + sFactorySelectScreen->menuCursor1SpriteId = CreateSprite(&sSpriteTemplate_Select_MenuHighlightLeft, 176, 112, 0); + sFactorySelectScreen->menuCursor2SpriteId = CreateSprite(&sSpriteTemplate_Select_MenuHighlightRight, 176, 144, 0); gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; @@ -1280,7 +1326,7 @@ static void Select_DestroyAllSprites(void) u8 i; for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - DestroySprite(&gSprites[sFactorySelectScreen->mons[i].spriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->mons[i].ballSpriteId]); DestroySprite(&gSprites[sFactorySelectScreen->cursorSpriteId]); DestroySprite(&gSprites[sFactorySelectScreen->menuCursor1SpriteId]); @@ -1306,14 +1352,14 @@ static void Select_UpdateBallCursorPosition(s8 direction) } cursorPos = sFactorySelectScreen->cursorPos; - gSprites[sFactorySelectScreen->cursorSpriteId].pos1.x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; + gSprites[sFactorySelectScreen->cursorSpriteId].pos1.x = gSprites[sFactorySelectScreen->mons[cursorPos].ballSpriteId].pos1.x; } static void Select_UpdateMenuCursorPosition(s8 direction) { if (direction > 0) // Move cursor down. { - if (sFactorySelectScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) + if (sFactorySelectScreen->menuCursorPos != ARRAY_COUNT(sSelect_MenuOptionFuncs) - 1) sFactorySelectScreen->menuCursorPos++; else sFactorySelectScreen->menuCursorPos = 0; @@ -1323,7 +1369,7 @@ static void Select_UpdateMenuCursorPosition(s8 direction) if (sFactorySelectScreen->menuCursorPos != 0) sFactorySelectScreen->menuCursorPos--; else - sFactorySelectScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; + sFactorySelectScreen->menuCursorPos = ARRAY_COUNT(sSelect_MenuOptionFuncs) - 1; } gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; @@ -1357,12 +1403,13 @@ static void Select_HandleMonSelectionChange(void) u8 cursorPos = sFactorySelectScreen->cursorPos; if (sFactorySelectScreen->mons[cursorPos].selectedId) // Deselect a mon. { - paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); - if (sFactorySelectScreen->selectingMonsState == 3 && sFactorySelectScreen->mons[cursorPos].selectedId == 1) + paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); + if (sFactorySelectScreen->selectingMonsState == FRONTIER_PARTY_SIZE + && sFactorySelectScreen->mons[cursorPos].selectedId == 1) { for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { - if (sFactorySelectScreen->mons[i].selectedId == 2) + if (sFactorySelectScreen->mons[i].selectedId == FRONTIER_PARTY_SIZE - 1) break; } if (i == SELECTABLE_MONS_COUNT) @@ -1375,12 +1422,12 @@ static void Select_HandleMonSelectionChange(void) } else // Select a mon. { - paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED); sFactorySelectScreen->mons[cursorPos].selectedId = sFactorySelectScreen->selectingMonsState; sFactorySelectScreen->selectingMonsState++; } - gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].oam.paletteNum = paletteNum; + gSprites[sFactorySelectScreen->mons[cursorPos].ballSpriteId].oam.paletteNum = paletteNum; } static void Select_SetBallSpritePaletteNum(u8 id) @@ -1388,191 +1435,196 @@ static void Select_SetBallSpritePaletteNum(u8 id) u8 palNum; if (sFactorySelectScreen->mons[id].selectedId) - palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + palNum = IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED); else - palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + palNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); - gSprites[sFactorySelectScreen->mons[id].spriteId].oam.paletteNum = palNum; + gSprites[sFactorySelectScreen->mons[id].ballSpriteId].oam.paletteNum = palNum; } -static void Task_FromSelectScreenToSummaryScreen(u8 taskId) +static void Select_Task_OpenSummaryScreen(u8 taskId) { u8 i; u8 currMonId; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 6: + case STATE_SUMMARY_FADE: gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].data[0] = 7; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].tState = STATE_SUMMARY_CLEAN; break; - case 7: + case STATE_SUMMARY_CLEAN: if (!gPaletteFade.active) { DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); - sub_819F444(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0); + HideMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating); Select_DestroyAllSprites(); FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilesetBuffer); + FREE_AND_SET_NULL(sSelectMonPicBgTilesetBuffer); FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilemapBuffer); + FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer); FreeAllWindowBuffers(); - gTasks[taskId].data[0] = 8; + gTasks[taskId].tState = STATE_SUMMARY_SHOW; } break; - case 8: - sFactorySelectScreen->unk2A4 = gPlttBufferUnfaded[228]; + case STATE_SUMMARY_SHOW: + sFactorySelectScreen->speciesNameColorBackup = gPlttBufferUnfaded[228]; DestroyTask(taskId); sFactorySelectScreen->fromSummaryScreen = TRUE; currMonId = sFactorySelectScreen->cursorPos; sFactorySelectMons = AllocZeroed(sizeof(struct Pokemon) * SELECTABLE_MONS_COUNT); for (i = 0; i < SELECTABLE_MONS_COUNT; i++) sFactorySelectMons[i] = sFactorySelectScreen->mons[i].monData; - ShowPokemonSummaryScreen(1, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen); + ShowPokemonSummaryScreen(PSS_MODE_LOCK_MOVES, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen); break; } } -static void Task_CloseSelectionScreen(u8 taskId) +static void Select_Task_Exit(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != TRUE) + if (sFactorySelectScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].tState++; + break; + case 1: + if (!UpdatePaletteFade()) { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].data[0]++; - break; - case 1: - if (!UpdatePaletteFade()) - { - Select_CopyMonsToPlayerParty(); - DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); - Select_DestroyAllSprites(); - FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); - FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); - FREE_AND_SET_NULL(sSelectMonCardBgTilemapBuffer); - FREE_AND_SET_NULL(sFactorySelectScreen); - FreeAllWindowBuffers(); - SetMainCallback2(CB2_ReturnToFieldContinueScript); - DestroyTask(taskId); - } - break; + Select_CopyMonsToPlayerParty(); + DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); + Select_DestroyAllSprites(); + FREE_AND_SET_NULL(sSelectMenuTilesetBuffer); + FREE_AND_SET_NULL(sSelectMenuTilemapBuffer); + FREE_AND_SET_NULL(sSelectMonPicBgTilemapBuffer); + FREE_AND_SET_NULL(sFactorySelectScreen); + FreeAllWindowBuffers(); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + DestroyTask(taskId); } + break; } } -static void Task_HandleSelectionScreenYesNo(u8 taskId) +// Handles the Yes/No prompt when confirming the 3 selected rental pokemon +static void Select_Task_HandleYesNo(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != TRUE) + if (sFactorySelectScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case STATE_YESNO_SHOW_MONS: + Select_ShowChosenMons(); + gTasks[taskId].tState = STATE_YESNO_SHOW_OPTIONS; + break; + case STATE_YESNO_SHOW_OPTIONS: + Select_ShowYesNoOptions(); + gTasks[taskId].tState = STATE_YESNO_HANDLE_INPUT; + break; + case STATE_YESNO_HANDLE_INPUT: + if (JOY_NEW(A_BUTTON)) { - case 10: - sub_819C4B4(); - gTasks[taskId].data[0] = 4; - break; - case 4: - Select_ShowYesNoOptions(); - gTasks[taskId].data[0] = 5; - break; - case 5: - if (JOY_NEW(A_BUTTON)) + PlaySE(SE_SELECT); + if (sFactorySelectScreen->yesNoCursorPos == 0) { - PlaySE(SE_SELECT); - if (sFactorySelectScreen->yesNoCursorPos == 0) - { - sub_819C568(); - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSelectionScreen; - } - else - { - sub_819B958(4); - sub_819BC9C(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; - } + // Selected Yes, confirmed selected pokemon + Select_HideChosenMons(); + gTasks[taskId].tState = 0; + gTasks[taskId].func = Select_Task_Exit; } - else if (JOY_NEW(B_BUTTON)) + else { - PlaySE(SE_SELECT); - sub_819B958(4); - sub_819BC9C(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + // Selected No, continue choosing pokemon + Select_ErasePopupMenu(SELECT_WIN_YES_NO); + Select_DeclineChosenMons(); + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Select_Task_HandleChooseMons; } - else if (JOY_REPEAT(DPAD_UP)) - { - PlaySE(SE_SELECT); - Select_UpdateYesNoCursorPosition(-1); - } - else if (JOY_REPEAT(DPAD_DOWN)) - { - PlaySE(SE_SELECT); - Select_UpdateYesNoCursorPosition(1); - } - break; } + else if (JOY_NEW(B_BUTTON)) + { + // Pressed B, Continue choosing pokemon + PlaySE(SE_SELECT); + Select_ErasePopupMenu(SELECT_WIN_YES_NO); + Select_DeclineChosenMons(); + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Select_Task_HandleChooseMons; + } + else if (JOY_REPEAT(DPAD_UP)) + { + PlaySE(SE_SELECT); + Select_UpdateYesNoCursorPosition(-1); + } + else if (JOY_REPEAT(DPAD_DOWN)) + { + PlaySE(SE_SELECT); + Select_UpdateYesNoCursorPosition(1); + } + break; } } -static void Task_HandleSelectionScreenMenu(u8 taskId) +// Handles the popup menu that shows when a pokemon is selected +static void Select_Task_HandleMenu(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 2: + case STATE_MENU_INIT: if (!sFactorySelectScreen->fromSummaryScreen) - sub_819F2B4(&sFactorySelectScreen->unk294[1].field1, &sFactorySelectScreen->unk2A0, FALSE); - gTasks[taskId].data[0] = 9; + OpenMonPic(&sFactorySelectScreen->monPics[1].bgSpriteId, &sFactorySelectScreen->monPicAnimating, FALSE); + gTasks[taskId].tState = STATE_MENU_SHOW_OPTIONS; break; - case 9: - if (sFactorySelectScreen->unk2A0 != TRUE) + case STATE_MENU_SHOW_OPTIONS: + if (sFactorySelectScreen->monPicAnimating != TRUE) { Select_ShowMenuOptions(); sFactorySelectScreen->fromSummaryScreen = FALSE; - gTasks[taskId].data[0] = 3; + gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; } break; - case 3: + case STATE_MENU_HANDLE_INPUT: if (JOY_NEW(A_BUTTON)) { u8 retVal; PlaySE(SE_SELECT); retVal = Select_RunMenuOptionFunc(); - if (retVal == 1) + if (retVal == SELECT_CONTINUE_CHOOSING) { - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Select_Task_HandleChooseMons; } - else if (retVal == 2) + else if (retVal == SELECT_CONFIRM_MONS) { - gTasks[taskId].data[0] = 10; - gTasks[taskId].func = Task_HandleSelectionScreenYesNo; + gTasks[taskId].tState = STATE_YESNO_SHOW_MONS; + gTasks[taskId].func = Select_Task_HandleYesNo; } - else if (retVal == 3) + else if (retVal == SELECT_INVALID_MON) { - gTasks[taskId].data[0] = 11; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + gTasks[taskId].tState = STATE_CHOOSE_MONS_INVALID; + gTasks[taskId].func = Select_Task_HandleChooseMons; } - else + else // SELECT_SUMMARY { - gTasks[taskId].data[0] = 6; - gTasks[taskId].func = Task_FromSelectScreenToSummaryScreen; + gTasks[taskId].tState = STATE_SUMMARY_FADE; + gTasks[taskId].func = Select_Task_OpenSummaryScreen; } } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - sub_819B958(3); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Select_Task_HandleChooseMons; } else if (JOY_REPEAT(DPAD_UP)) { @@ -1585,81 +1637,97 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) Select_UpdateMenuCursorPosition(1); } break; - case 12: + case STATE_MENU_REINIT: if (!gPaletteFade.active) { if (sFactorySelectScreen->fromSummaryScreen == TRUE) { - gPlttBufferFaded[228] = sFactorySelectScreen->unk2A4; + gPlttBufferFaded[228] = sFactorySelectScreen->speciesNameColorBackup; gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; } sFactorySelectScreen->fromSummaryScreen = FALSE; - gTasks[taskId].data[0] = 3; + gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; } break; - case 13: + case STATE_MENU_RESHOW: Select_ShowMenuOptions(); - gTasks[taskId].data[0] = 12; + gTasks[taskId].tState = STATE_MENU_REINIT; break; } } -static void Task_HandleSelectionScreenChooseMons(u8 taskId) +// Handles input on the main selection screen, when no popup menu is open +static void Select_Task_HandleChooseMons(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != TRUE) + if (sFactorySelectScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case STATE_CHOOSE_MONS_INIT: + if (!gPaletteFade.active) { - case 0: - if (!gPaletteFade.active) - { - gTasks[taskId].data[0] = 1; - sFactorySelectScreen->unk2A2 = TRUE; - } - break; - case 1: - if (JOY_NEW(A_BUTTON)) - { - PlaySE(SE_SELECT); - sFactorySelectScreen->unk2A2 = FALSE; - gTasks[taskId].data[0] = 2; - gTasks[taskId].func = Task_HandleSelectionScreenMenu; - } - else if (JOY_REPEAT(DPAD_LEFT)) - { - PlaySE(SE_SELECT); - Select_UpdateBallCursorPosition(-1); - Select_PrintMonCategory(); - Select_PrintMonSpecies(); - } - else if (JOY_REPEAT(DPAD_RIGHT)) - { - PlaySE(SE_SELECT); - Select_UpdateBallCursorPosition(1); - Select_PrintMonCategory(); - Select_PrintMonSpecies(); - } - break; - case 11: - if (JOY_NEW(A_BUTTON)) - { - PlaySE(SE_SELECT); - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - Select_PrintSelectMonString(); - sFactorySelectScreen->unk2A2 = TRUE; - gTasks[taskId].data[0] = 1; - } - break; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; } + break; + case STATE_CHOOSE_MONS_HANDLE_INPUT: + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sFactorySelectScreen->fadeSpeciesNameActive = FALSE; + gTasks[taskId].tState = STATE_MENU_INIT; + gTasks[taskId].func = Select_Task_HandleMenu; + } + else if (JOY_REPEAT(DPAD_LEFT)) + { + PlaySE(SE_SELECT); + Select_UpdateBallCursorPosition(-1); + Select_PrintMonCategory(); + Select_PrintMonSpecies(); + } + else if (JOY_REPEAT(DPAD_RIGHT)) + { + PlaySE(SE_SELECT); + Select_UpdateBallCursorPosition(1); + Select_PrintMonCategory(); + Select_PrintMonSpecies(); + } + break; + case STATE_CHOOSE_MONS_INVALID: + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); + Select_PrintSelectMonString(); + sFactorySelectScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; + } + break; } } +#undef STATE_CHOOSE_MONS_INIT +#undef STATE_CHOOSE_MONS_HANDLE_INPUT +#undef STATE_MENU_INIT +#undef STATE_MENU_HANDLE_INPUT +#undef STATE_YESNO_SHOW_OPTIONS +#undef STATE_YESNO_HANDLE_INPUT +#undef STATE_SUMMARY_FADE +#undef STATE_SUMMARY_CLEAN +#undef STATE_SUMMARY_SHOW +#undef STATE_MENU_SHOW_OPTIONS +#undef STATE_YESNO_SHOW_MONS +#undef STATE_CHOOSE_MONS_INVALID +#undef STATE_MENU_REINIT +#undef STATE_MENU_RESHOW + static void CreateFrontierFactorySelectableMons(u8 firstMonId) { u8 i, j = 0; u8 ivs = 0; u8 level = 0; - u8 happiness = 0; + u8 friendship = 0; u32 otId = 0; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -1690,20 +1758,20 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) ivs, gFacilityTrainerMons[monId].evSpread, otId); - happiness = 0; + friendship = 0; for (j = 0; j < MAX_MON_MOVES; j++) SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j); - SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &friendship); SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); } } -static void CreateTentFactorySelectableMons(u8 firstMonId) +static void CreateSlateportTentSelectableMons(u8 firstMonId) { u8 i, j; u8 ivs = 0; u8 level = 30; - u8 happiness = 0; + u8 friendship = 0; u32 otId = 0; gFacilityTrainerMons = gSlateportBattleTentMons; @@ -1720,10 +1788,10 @@ static void CreateTentFactorySelectableMons(u8 firstMonId) ivs, gFacilityTrainerMons[monId].evSpread, otId); - happiness = 0; + friendship = 0; for (j = 0; j < MAX_MON_MOVES; j++) SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j); - SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &friendship); SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); } } @@ -1732,7 +1800,7 @@ static void Select_CopyMonsToPlayerParty(void) { u8 i, j; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { for (j = 0; j < SELECTABLE_MONS_COUNT; j++) { @@ -1781,7 +1849,7 @@ static void Select_ShowYesNoOptions(void) Select_PrintYesNoOptions(); } -static void sub_819B958(u8 windowId) +static void Select_ErasePopupMenu(u8 windowId) { gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = TRUE; @@ -1792,9 +1860,9 @@ static void sub_819B958(u8 windowId) static void Select_PrintRentalPkmnString(void) { - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - AddTextPrinterParameterized(0, 1, gText_RentalPkmn2, 2, 1, 0, NULL); - CopyWindowToVram(0, 3); + FillWindowPixelBuffer(SELECT_WIN_TITLE, PIXEL_FILL(0)); + AddTextPrinterParameterized(SELECT_WIN_TITLE, 1, gText_RentalPkmn2, 2, 1, 0, NULL); + CopyWindowToVram(SELECT_WIN_TITLE, 3); } static void Select_PrintMonSpecies(void) @@ -1803,19 +1871,19 @@ static void Select_PrintMonSpecies(void) u8 x; u8 monId = sFactorySelectScreen->cursorPos; - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(SELECT_WIN_SPECIES, PIXEL_FILL(0)); species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, sSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(1, 2); + AddTextPrinterParameterized3(SELECT_WIN_SPECIES, 1, x, 1, sSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SELECT_WIN_SPECIES, 2); } static void Select_PrintSelectMonString(void) { const u8 *str = NULL; - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(SELECT_WIN_INFO, PIXEL_FILL(0)); if (sFactorySelectScreen->selectingMonsState == 1) str = gText_SelectFirstPkmn; else if (sFactorySelectScreen->selectingMonsState == 2) @@ -1825,46 +1893,46 @@ static void Select_PrintSelectMonString(void) else str = gText_TheseThreePkmnOkay; - AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); + AddTextPrinterParameterized(SELECT_WIN_INFO, 1, str, 2, 5, 0, NULL); + CopyWindowToVram(SELECT_WIN_INFO, 2); } static void Select_PrintCantSelectSameMon(void) { - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized(2, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); + FillWindowPixelBuffer(SELECT_WIN_INFO, PIXEL_FILL(0)); + AddTextPrinterParameterized(SELECT_WIN_INFO, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); + CopyWindowToVram(SELECT_WIN_INFO, 2); } static void Select_PrintMenuOptions(void) { u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId; - PutWindowTilemap(3); - FillWindowPixelBuffer(3, PIXEL_FILL(0)); - AddTextPrinterParameterized3(3, 1, 7, 1, sMenuOptionTextColors, 0, gText_Summary); + PutWindowTilemap(SELECT_WIN_OPTIONS); + FillWindowPixelBuffer(SELECT_WIN_OPTIONS, PIXEL_FILL(0)); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 1, sMenuOptionTextColors, 0, gText_Summary); if (selectedId != 0) - AddTextPrinterParameterized3(3, 1, 7, 17, sMenuOptionTextColors, 0, gText_Deselect); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 17, sMenuOptionTextColors, 0, gText_Deselect); else - AddTextPrinterParameterized3(3, 1, 7, 17, sMenuOptionTextColors, 0, gText_Rent); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 17, sMenuOptionTextColors, 0, gText_Rent); - AddTextPrinterParameterized3(3, 1, 7, 33, sMenuOptionTextColors, 0, gText_Others2); - CopyWindowToVram(3, 3); + AddTextPrinterParameterized3(SELECT_WIN_OPTIONS, 1, 7, 33, sMenuOptionTextColors, 0, gText_Others2); + CopyWindowToVram(SELECT_WIN_OPTIONS, 3); } static void Select_PrintYesNoOptions(void) { - PutWindowTilemap(4); - FillWindowPixelBuffer(4, PIXEL_FILL(0)); - AddTextPrinterParameterized3(4, 1, 7, 1, sMenuOptionTextColors, 0, gText_Yes2); - AddTextPrinterParameterized3(4, 1, 7, 17, sMenuOptionTextColors, 0, gText_No2); - CopyWindowToVram(4, 3); + PutWindowTilemap(SELECT_WIN_YES_NO); + FillWindowPixelBuffer(SELECT_WIN_YES_NO, PIXEL_FILL(0)); + AddTextPrinterParameterized3(SELECT_WIN_YES_NO, 1, 7, 1, sMenuOptionTextColors, 0, gText_Yes2); + AddTextPrinterParameterized3(SELECT_WIN_YES_NO, 1, 7, 17, sMenuOptionTextColors, 0, gText_No2); + CopyWindowToVram(SELECT_WIN_YES_NO, 3); } static u8 Select_RunMenuOptionFunc(void) { - gUnknown_030062E8 = sSelect_MenuOptionFuncs[sFactorySelectScreen->menuCursorPos]; - return gUnknown_030062E8(); + gFactorySelect_CurrentOptionFunc = sSelect_MenuOptionFuncs[sFactorySelectScreen->menuCursorPos]; + return gFactorySelect_CurrentOptionFunc(); } static u8 Select_OptionRentDeselect(void) @@ -1874,29 +1942,29 @@ static u8 Select_OptionRentDeselect(void) if (selectedId == 0 && !Select_AreSpeciesValid(monId)) { Select_PrintCantSelectSameMon(); - sub_819B958(3); - return 3; + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + return SELECT_INVALID_MON; } else { - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); + CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); Select_HandleMonSelectionChange(); Select_PrintSelectMonString(); - sub_819B958(3); - if (sFactorySelectScreen->selectingMonsState > 3) - return 2; + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + if (sFactorySelectScreen->selectingMonsState > FRONTIER_PARTY_SIZE) + return SELECT_CONFIRM_MONS; else - return 1; + return SELECT_CONTINUE_CHOOSING; } } -static u8 sub_819BC9C(void) +static u8 Select_DeclineChosenMons(void) { - sub_819C568(); + Select_HideChosenMons(); Select_HandleMonSelectionChange(); Select_PrintSelectMonString(); - sub_819B958(3); - if (sFactorySelectScreen->selectingMonsState > 3) + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + if (sFactorySelectScreen->selectingMonsState > FRONTIER_PARTY_SIZE) return 2; else return 1; @@ -1904,14 +1972,14 @@ static u8 sub_819BC9C(void) static u8 Select_OptionSummary(void) { - return 0; + return SELECT_SUMMARY; } static u8 Select_OptionOthers(void) { - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); - sub_819B958(3); - return 1; + CloseMonPic(sFactorySelectScreen->monPics[1], &sFactorySelectScreen->monPicAnimating, FALSE); + Select_ErasePopupMenu(SELECT_WIN_OPTIONS); + return SELECT_CONTINUE_CHOOSING; } static void Select_PrintMonCategory(void) @@ -1922,17 +1990,17 @@ static void Select_PrintMonCategory(void) u8 monId = sFactorySelectScreen->cursorPos; if (monId < SELECTABLE_MONS_COUNT) { - PutWindowTilemap(5); - FillWindowPixelBuffer(5, PIXEL_FILL(0)); + PutWindowTilemap(SELECT_WIN_MON_CATEGORY); + FillWindowPixelBuffer(SELECT_WIN_MON_CATEGORY, PIXEL_FILL(0)); species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); x = GetStringRightAlignXOffset(1, text, 0x76); - AddTextPrinterParameterized(5, 1, text, x, 1, 0, NULL); - CopyWindowToVram(5, 2); + AddTextPrinterParameterized(SELECT_WIN_MON_CATEGORY, 1, text, x, 1, 0, NULL); + CopyWindowToVram(SELECT_WIN_MON_CATEGORY, 2); } } -static void Summary_ShowMonSprite(void) +static void Select_CreateMonSprite(void) { u8 monId = sFactorySelectScreen->cursorPos; struct Pokemon *mon = &sFactorySelectScreen->mons[monId].monData; @@ -1940,44 +2008,44 @@ static void Summary_ShowMonSprite(void) u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; + sFactorySelectScreen->monPics[1].monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecY = 0; - sFactorySelectScreen->unk2A0 = FALSE; + sFactorySelectScreen->monPicAnimating = FALSE; } -static void sub_819BE20(bool8 arg0) +static void Select_SetMonPicAnimating(bool8 animating) { - sFactorySelectScreen->unk2A0 = arg0; + sFactorySelectScreen->monPicAnimating = animating; } -static void Select_ShowSummaryMonSprite(void) +static void Select_ReshowMonSprite(void) { struct Pokemon *mon; u16 species; u32 personality, otId; - sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 2); + sFactorySelectScreen->monPics[1].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[1].bgSpriteId], 2); mon = &sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monData; species = GetMonData(mon, MON_DATA_SPECIES, NULL); personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; + sFactorySelectScreen->monPics[1].monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->monPics[1].monSpriteId].centerToCornerVecY = 0; - gSprites[sFactorySelectScreen->unk294[1].field1].invisible = TRUE; + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = TRUE; } -static void Select_ShowChosenMonsSprites(void) +static void Select_CreateChosenMonsSprites(void) { u8 i, j; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { for (j = 0; j < SELECTABLE_MONS_COUNT; j++) { @@ -1988,66 +2056,80 @@ static void Select_ShowChosenMonsSprites(void) u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySelectScreen->unk294[i].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, 0xFFFF); - gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecX = 0; - gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecY = 0; + sFactorySelectScreen->monPics[i].monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, 0xFFFF); + gSprites[sFactorySelectScreen->monPics[i].monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->monPics[i].monSpriteId].centerToCornerVecY = 0; break; } } } - sFactorySelectScreen->unk2A0 = FALSE; + sFactorySelectScreen->monPicAnimating = FALSE; } -static void sub_819C040(struct Sprite *sprite) +static void SpriteCB_OpenChosenMonPics(struct Sprite *sprite) { u8 taskId; + // Current sprite is monPics[1] if (sprite->affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) + && gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].affineAnimEnded + && gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].affineAnimEnded) { sprite->invisible = TRUE; - gSprites[sFactorySelectScreen->unk294[0].field1].invisible = TRUE; - gSprites[sFactorySelectScreen->unk294[2].field1].invisible = TRUE; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = TRUE; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = TRUE; - taskId = CreateTask(sub_819C1D0, 1); + taskId = CreateTask(Select_Task_OpenChosenMonPics, 1); gTasks[taskId].func(taskId); sprite->callback = SpriteCallbackDummy; } } -static void sub_819C100(struct Sprite *sprite) +static void SpriteCB_CloseChosenMonPics(struct Sprite *sprite) { + // Current sprite is monPics[1] if (sprite->affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded - && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) + && gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].affineAnimEnded + && gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].affineAnimEnded) { FreeOamMatrix(sprite->oam.matrixNum); - FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[0].field1].oam.matrixNum); - FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[2].field1].oam.matrixNum); + FreeOamMatrix(gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].oam.matrixNum); + FreeOamMatrix(gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].oam.matrixNum); - sFactorySelectScreen->unk2A0 = FALSE; + sFactorySelectScreen->monPicAnimating = FALSE; - DestroySprite(&gSprites[sFactorySelectScreen->unk294[0].field1]); - DestroySprite(&gSprites[sFactorySelectScreen->unk294[2].field1]); + DestroySprite(&gSprites[sFactorySelectScreen->monPics[0].bgSpriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->monPics[2].bgSpriteId]); DestroySprite(sprite); } } -static void sub_819C1D0(u8 taskId) +// Task data for Select_Task_OpenChosenMonPics, Select_Task_CloseChosenMonPics, Task_CloseMonPic, and Task_OpenMonPic +#define tWinLeft data[3] +#ifndef UBFIX +#define tWinRight data[24] // UB: Typo? Likely meant data[4], 24 is out of bounds +#else +#define tWinRight data[4] +#endif +#define tWinTop data[5] +#define tWinBottom data[8] +#define tSpriteId data[6] // TODO: Clarify, what sprite +#define tIsSwapScreen data[7] + +static void Select_Task_OpenChosenMonPics(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - task->data[3] = 16; - task->data[24] = 224; // BUG: writing outside the array's bounds. - task->data[5] = 64; - task->data[8] = 65; + task->tWinLeft = 16; + task->tWinRight = DISPLAY_WIDTH - 16; + task->tWinTop = 64; + task->tWinBottom = 65; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); break; @@ -2057,97 +2139,97 @@ static void sub_819C1D0(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); break; case 2: - task->data[5] -= 4; - task->data[8] += 4; - if (task->data[5] <= 32 || task->data[8] >= 96) + task->tWinTop -= 4; + task->tWinBottom += 4; + if (task->tWinTop <= 32 || task->tWinBottom >= 96) { - task->data[5] = 32; - task->data[8] = 96; + task->tWinTop = 32; + task->tWinBottom = 96; ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] != 32) + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + if (task->tWinTop != 32) return; break; default: DestroyTask(taskId); - Select_ShowChosenMonsSprites(); + Select_CreateChosenMonsSprites(); return; } - task->data[0]++; + task->tState++; } -static void sub_819C2D4(u8 taskId) +static void Select_Task_CloseChosenMonPics(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { + case 0: + task->tWinLeft = 16; + task->tWinRight = DISPLAY_WIDTH - 16; + task->tWinTop = 32; + task->tWinBottom = 96; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); + task->tState++; + break; + case 1: + task->tWinTop += 4; + task->tWinBottom -= 4; + if (task->tWinTop >= 64 || task->tWinBottom <= 65) + { + task->tWinTop = 64; + task->tWinBottom = 65; + } + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + if (task->tWinTop == 64) + task->tState++; + break; default: HideBg(3); - gSprites[sFactorySelectScreen->unk294[1].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C100; - gSprites[sFactorySelectScreen->unk294[0].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; - gSprites[sFactorySelectScreen->unk294[2].field1].invisible = FALSE; - gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[0].field1], 1); - StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[2].field1], 1); + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = SpriteCB_CloseChosenMonPics; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].invisible = FALSE; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy; + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[1].bgSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[0].bgSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->monPics[2].bgSpriteId], 1); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); DestroyTask(taskId); break; - case 0: - task->data[3] = 16; - task->data[24] = 224; // BUG: writing outside the array's bounds. - task->data[5] = 32; - task->data[8] = 96; - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); - task->data[0]++; - break; - case 1: - task->data[5] += 4; - task->data[8] -= 4; - if (task->data[5] >= 64 || task->data[8] <= 65) - { - task->data[5] = 64; - task->data[8] = 65; - } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] == 64) - task->data[0]++; - break; } } -static void sub_819C4B4(void) +static void Select_ShowChosenMons(void) { - sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); - sFactorySelectScreen->unk294[0].field1 = CreateSprite(&gUnknown_08610638, 44, 64, 1); - sFactorySelectScreen->unk294[2].field1 = CreateSprite(&gUnknown_08610638, 196, 64, 1); + sFactorySelectScreen->monPics[1].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 120, 64, 1); + sFactorySelectScreen->monPics[0].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 44, 64, 1); + sFactorySelectScreen->monPics[2].bgSpriteId = CreateSprite(&sSpriteTemplate_Select_MonPicBgAnim, 196, 64, 1); - gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C040; - gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; - gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->monPics[1].bgSpriteId].callback = SpriteCB_OpenChosenMonPics; + gSprites[sFactorySelectScreen->monPics[0].bgSpriteId].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->monPics[2].bgSpriteId].callback = SpriteCallbackDummy; - sFactorySelectScreen->unk2A0 = TRUE; + sFactorySelectScreen->monPicAnimating = TRUE; } -static void sub_819C568(void) +static void Select_HideChosenMons(void) { u8 taskId; - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[0].field0); - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[1].field0); - FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[2].field0); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[0].monSpriteId); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[1].monSpriteId); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->monPics[2].monSpriteId); - taskId = CreateTask(sub_819C2D4, 1); + taskId = CreateTask(Select_Task_CloseChosenMonPics, 1); gTasks[taskId].func(taskId); - sFactorySelectScreen->unk2A0 = TRUE; + sFactorySelectScreen->monPicAnimating = TRUE; } static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V) @@ -2178,60 +2260,59 @@ static bool32 Select_AreSpeciesValid(u16 monId) } } } - return TRUE; } -static void Task_SelectFadeSpeciesName(u8 taskId) +static void Select_Task_FadeSpeciesName(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 0: - sFactorySelectScreen->unk2A7 = 0; - sFactorySelectScreen->unk2A8 = 0; - sFactorySelectScreen->unk2A6 = TRUE; - gTasks[taskId].data[0] = 1; + case FADESTATE_INIT: + sFactorySelectScreen->fadeSpeciesNameCoeffDelay = 0; + sFactorySelectScreen->fadeSpeciesNameCoeff = 0; + sFactorySelectScreen->fadeSpeciesNameFadeOut = TRUE; + gTasks[taskId].tState = FADESTATE_RUN; break; - case 1: - if (sFactorySelectScreen->unk2A2) + case FADESTATE_RUN: + if (sFactorySelectScreen->fadeSpeciesNameActive) { - if (sFactorySelectScreen->unk2A9) + if (sFactorySelectScreen->faceSpeciesNameDelay) { - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = FADESTATE_DELAY; } else { - sFactorySelectScreen->unk2A7++; - if (sFactorySelectScreen->unk2A7 > 6) + sFactorySelectScreen->fadeSpeciesNameCoeffDelay++; + if (sFactorySelectScreen->fadeSpeciesNameCoeffDelay > 6) { - sFactorySelectScreen->unk2A7 = 0; - if (!sFactorySelectScreen->unk2A6) - sFactorySelectScreen->unk2A8--; + sFactorySelectScreen->fadeSpeciesNameCoeffDelay = 0; + if (!sFactorySelectScreen->fadeSpeciesNameFadeOut) + sFactorySelectScreen->fadeSpeciesNameCoeff--; else - sFactorySelectScreen->unk2A8++; + sFactorySelectScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySelectScreen->unk2A8, 0); - if (sFactorySelectScreen->unk2A8 > 5) + BlendPalettes(0x4000, sFactorySelectScreen->fadeSpeciesNameCoeff, 0); + if (sFactorySelectScreen->fadeSpeciesNameCoeff > 5) { - sFactorySelectScreen->unk2A6 = FALSE; + sFactorySelectScreen->fadeSpeciesNameFadeOut = FALSE; } - else if (sFactorySelectScreen->unk2A8 == 0) + else if (sFactorySelectScreen->fadeSpeciesNameCoeff == 0) { - gTasks[taskId].data[0] = 2; - sFactorySelectScreen->unk2A6 = TRUE; + gTasks[taskId].tState = FADESTATE_DELAY; + sFactorySelectScreen->fadeSpeciesNameFadeOut = TRUE; } } } break; - case 2: - if (sFactorySelectScreen->unk2A9 > 14) + case FADESTATE_DELAY: + if (sFactorySelectScreen->faceSpeciesNameDelay > 14) { - sFactorySelectScreen->unk2A9 = 0; - gTasks[taskId].data[0] = 1; + sFactorySelectScreen->faceSpeciesNameDelay = 0; + gTasks[taskId].tState = FADESTATE_RUN; } else { - sFactorySelectScreen->unk2A9++; + sFactorySelectScreen->faceSpeciesNameDelay++; } break; } @@ -2257,233 +2338,257 @@ static void Swap_VblankCb(void) static void CopySwappedMonData(void) { - u8 happiness; + u8 friendship; gPlayerParty[sFactorySwapScreen->playerMonId] = gEnemyParty[sFactorySwapScreen->enemyMonId]; - happiness = 0; - SetMonData(&gPlayerParty[sFactorySwapScreen->playerMonId], MON_DATA_FRIENDSHIP, &happiness); - gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + 3].monId; - gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + 3].ivs; + friendship = 0; + SetMonData(&gPlayerParty[sFactorySwapScreen->playerMonId], MON_DATA_FRIENDSHIP, &friendship); + gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + FRONTIER_PARTY_SIZE].monId; + gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + FRONTIER_PARTY_SIZE].ivs; gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId], MON_DATA_PERSONALITY, NULL); gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].abilityNum = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ABILITY_NUM, NULL); } -static void Task_FromSwapScreenToSummaryScreen(u8 taskId) +// Main swap states +// States for the main tasks of the Swap_ functions after initialization, including: +// Swap_Task_OpenSummaryScreen, Swap_Task_HandleYesNo, Swap_Task_HandleMenu, and Swap_Task_HandleChooseMons +// Tasks sharing states was unnecessary, see "Main select states" +#define STATE_CHOOSE_MONS_INIT 0 +#define STATE_CHOOSE_MONS_HANDLE_INPUT 1 +#define STATE_MENU_INIT 2 +#define STATE_MENU_HANDLE_INPUT 3 +#define STATE_YESNO_SHOW 4 +#define STATE_YESNO_HANDLE_INPUT 5 +#define STATE_SUMMARY_FADE 6 +#define STATE_SUMMARY_CLEAN 7 +#define STATE_SUMMARY_SHOW 8 +#define STATE_MENU_SHOW_OPTIONS 9 + +static void Swap_Task_OpenSummaryScreen(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 6: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].data[0] = 7; + case STATE_SUMMARY_FADE: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].tState = STATE_SUMMARY_CLEAN; break; - case 7: + case STATE_SUMMARY_CLEAN: if (!gPaletteFade.active) { DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); - sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); + HideMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating); Swap_DestroyAllSprites(); FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilesetBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilesetBuffer); FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilemapBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilemapBuffer); FreeAllWindowBuffers(); - gTasks[taskId].data[0] = 8; + gTasks[taskId].tState = STATE_SUMMARY_SHOW; } break; - case 8: + case STATE_SUMMARY_SHOW: DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; - sFactorySwapScreen->unk24 = gPlttBufferUnfaded[244]; - ShowPokemonSummaryScreen(0, gPlayerParty, sFactorySwapScreen->cursorPos, 3 - 1, CB2_InitSwapScreen); + sFactorySwapScreen->speciesNameColorBackup = gPlttBufferUnfaded[244]; + ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, sFactorySwapScreen->cursorPos, FRONTIER_PARTY_SIZE - 1, CB2_InitSwapScreen); break; } } -static void Task_CloseSwapScreen(u8 taskId) +static void Swap_Task_Exit(u8 taskId) { - if (sFactorySwapScreen->unk30 != TRUE) + if (sFactorySwapScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case 0: + // Set return value for script + // TRUE if player kept their current pokemon + if (sFactorySwapScreen->monSwapped == TRUE) { - case 0: - if (sFactorySwapScreen->monSwapped == TRUE) - { - gTasks[taskId].data[0]++; - gSpecialVar_Result = 0; - } - else - { - gTasks[taskId].data[0] = 2; - gSpecialVar_Result = 1; - } - break; - case 1: - if (sFactorySwapScreen->monSwapped == TRUE) - { - sFactorySwapScreen->enemyMonId = sFactorySwapScreen->cursorPos; - CopySwappedMonData(); - } - gTasks[taskId].data[0]++; - break; - case 2: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); - gTasks[taskId].data[0]++; - break; - case 3: - if (!UpdatePaletteFade()) - { - DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); - Swap_DestroyAllSprites(); - FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilesetBuffer); - FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); - FREE_AND_SET_NULL(sSwapMonCardBgTilemapBuffer); - FREE_AND_SET_NULL(sFactorySwapScreen); - FreeAllWindowBuffers(); - SetMainCallback2(CB2_ReturnToFieldContinueScript); - DestroyTask(taskId); - } - break; + gTasks[taskId].tState++; + gSpecialVar_Result = FALSE; } + else + { + gTasks[taskId].tState = 2; + gSpecialVar_Result = TRUE; + } + break; + case 1: + if (sFactorySwapScreen->monSwapped == TRUE) + { + sFactorySwapScreen->enemyMonId = sFactorySwapScreen->cursorPos; + CopySwappedMonData(); + } + gTasks[taskId].tState++; + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].tState++; + break; + case 3: + if (!UpdatePaletteFade()) + { + DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); + Swap_DestroyAllSprites(); + FREE_AND_SET_NULL(sSwapMenuTilesetBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilesetBuffer); + FREE_AND_SET_NULL(sSwapMenuTilemapBuffer); + FREE_AND_SET_NULL(sSwapMonPicBgTilemapBuffer); + FREE_AND_SET_NULL(sFactorySwapScreen); + FreeAllWindowBuffers(); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + DestroyTask(taskId); + } + break; } } -static void Task_HandleSwapScreenYesNo(u8 taskId) +#define tSaidYes data[1] +#define tFollowUpTaskState data[5] +#define tFollowUpTaskPtrHi data[6] +#define tFollowUpTaskPtrLo data[7] + +static void Swap_Task_HandleYesNo(u8 taskId) { u16 loPtr, hiPtr; - if (sFactorySwapScreen->unk30 != TRUE) + if (sFactorySwapScreen->monPicAnimating == TRUE) + return; + + switch (gTasks[taskId].tState) { - switch (gTasks[taskId].data[0]) + case STATE_YESNO_SHOW: + Swap_ShowYesNoOptions(); + gTasks[taskId].tState = STATE_YESNO_HANDLE_INPUT; + break; + case STATE_YESNO_HANDLE_INPUT: + if (JOY_NEW(A_BUTTON)) { - case 4: - Swap_ShowYesNoOptions(); - gTasks[taskId].data[0] = 5; - break; - case 5: - if (JOY_NEW(A_BUTTON)) + PlaySE(SE_SELECT); + if (sFactorySwapScreen->yesNoCursorPos == 0) { - PlaySE(SE_SELECT); - if (sFactorySwapScreen->yesNoCursorPos == 0) - { - gTasks[taskId].data[1] = 1; - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); - } - else - { - gTasks[taskId].data[1] = 0; - sub_819EA64(4); - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); - } - } - else if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_SELECT); - gTasks[taskId].data[1] = 0; - sub_819EA64(4); - hiPtr = gTasks[taskId].data[6]; - loPtr = gTasks[taskId].data[7]; + // Selected Yes + gTasks[taskId].tSaidYes = TRUE; + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); } - else if (JOY_REPEAT(DPAD_UP)) + else { - PlaySE(SE_SELECT); - Swap_UpdateYesNoCursorPosition(-1); + // Selected No + gTasks[taskId].tSaidYes = FALSE; + Swap_ErasePopupMenu(SWAP_WIN_YES_NO); + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); } - else if (JOY_REPEAT(DPAD_DOWN)) - { - PlaySE(SE_SELECT); - Swap_UpdateYesNoCursorPosition(1); - } - break; } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + gTasks[taskId].tSaidYes = FALSE; + Swap_ErasePopupMenu(SWAP_WIN_YES_NO); + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + } + else if (JOY_REPEAT(DPAD_UP)) + { + PlaySE(SE_SELECT); + Swap_UpdateYesNoCursorPosition(-1); + } + else if (JOY_REPEAT(DPAD_DOWN)) + { + PlaySE(SE_SELECT); + Swap_UpdateYesNoCursorPosition(1); + } + break; } } -static void sub_819CBDC(u8 taskId) +static void Swap_HandleQuitSwappingResposne(u8 taskId) { - if (gTasks[taskId].data[1] == 1) + if (gTasks[taskId].tSaidYes == TRUE) { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSwapScreen; + gTasks[taskId].tState = 0; + gTasks[taskId].func = Swap_Task_Exit; } else { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; } } -static void sub_819CC24(u8 taskId) +static void Swap_AskQuitSwapping(u8 taskId) { - if (gTasks[taskId].data[0] == 0) + if (gTasks[taskId].tState == 0) { Swap_PrintOnInfoWindow(gText_QuitSwapping); sFactorySwapScreen->monSwapped = FALSE; - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[6] = (u32)(sub_819CBDC) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CBDC); - gTasks[taskId].func = Task_HandleSwapScreenYesNo; + gTasks[taskId].tState = STATE_YESNO_SHOW; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_HandleQuitSwappingResposne) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_HandleQuitSwappingResposne); + gTasks[taskId].func = Swap_Task_HandleYesNo; } } -static void sub_819CC74(u8 taskId) +static void Swap_HandleAcceptMonResponse(u8 taskId) { - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - if (gTasks[taskId].data[1] == 1) + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); + if (gTasks[taskId].tSaidYes == TRUE) { - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = Task_CloseSwapScreen; + gTasks[taskId].tState = 0; + gTasks[taskId].func = Swap_Task_Exit; } else { - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; } } -static void sub_819CCD4(u8 taskId) +static void Swap_AskAcceptMon(u8 taskId) { - if (gTasks[taskId].data[0] == 0) + if (gTasks[taskId].tState == 0) { - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); + OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); Swap_PrintOnInfoWindow(gText_AcceptThisPkmn); sFactorySwapScreen->monSwapped = TRUE; - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[6] = (u32)(sub_819CC74) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CC74); - gTasks[taskId].func = Task_HandleSwapScreenYesNo; + gTasks[taskId].tState = STATE_YESNO_SHOW; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_HandleAcceptMonResponse) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_HandleAcceptMonResponse); + gTasks[taskId].func = Swap_Task_HandleYesNo; } } -static void Task_HandleSwapScreenMenu(u8 taskId) +static void Swap_Task_HandleMenu(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 2: + case STATE_MENU_INIT: if (!sFactorySwapScreen->fromSummaryScreen) - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0] = 9; + OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); + gTasks[taskId].tState = STATE_MENU_SHOW_OPTIONS; break; - case 9: - if (sFactorySwapScreen->unk30 != TRUE) + case STATE_MENU_SHOW_OPTIONS: + if (sFactorySwapScreen->monPicAnimating != TRUE) { Swap_ShowMenuOptions(); - gTasks[taskId].data[0] = 3; + gTasks[taskId].tState = STATE_MENU_HANDLE_INPUT; } break; - case 3: - if (sFactorySwapScreen->unk30 != TRUE) + case STATE_MENU_HANDLE_INPUT: + if (sFactorySwapScreen->monPicAnimating != TRUE) { if (JOY_NEW(A_BUTTON)) { @@ -2493,13 +2598,13 @@ static void Task_HandleSwapScreenMenu(u8 taskId) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - sub_819EA64(3); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); + Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; } else if (JOY_REPEAT(DPAD_UP)) { @@ -2514,37 +2619,40 @@ static void Task_HandleSwapScreenMenu(u8 taskId) } } -static void Task_HandleSwapScreenChooseMons(u8 taskId) +// Handles input on the two main swap screens (choosing a current pokeon to get rid of, and choosing a new pokemon to receive) +static void Swap_Task_HandleChooseMons(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 0: + case STATE_CHOOSE_MONS_INIT: if (!gPaletteFade.active) { - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = 1; + sFactorySwapScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = STATE_CHOOSE_MONS_HANDLE_INPUT; } break; - case 1: + case STATE_CHOOSE_MONS_HANDLE_INPUT: if (JOY_NEW(A_BUTTON)) { + // Run whatever action is currently selected (a pokeball, the Cancel button, etc.) PlaySE(SE_SELECT); - sFactorySwapScreen->unk22 = FALSE; - Swap_PrintMonSpecies2(); - sub_819EAC0(); + sFactorySwapScreen->fadeSpeciesNameActive = FALSE; + Swap_PrintMonSpeciesAtFade(); + Swap_EraseSpeciesWindow(); Swap_RunActionFunc(taskId); } else if (JOY_NEW(B_BUTTON)) { + // Ask if player wants to quit swapping PlaySE(SE_SELECT); - sFactorySwapScreen->unk22 = FALSE; - Swap_PrintMonSpecies2(); - sub_819EAC0(); - gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 16; - gTasks[taskId].data[7] = (u32)(sub_819CC24); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 0; - gTasks[taskId].func = sub_819D588; + sFactorySwapScreen->fadeSpeciesNameActive = FALSE; + Swap_PrintMonSpeciesAtFade(); + Swap_EraseSpeciesWindow(); + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_AskQuitSwapping) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_AskQuitSwapping); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskState = 0; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionOut; } else if (JOY_REPEAT(DPAD_LEFT)) { @@ -2574,116 +2682,121 @@ static void Task_HandleSwapScreenChooseMons(u8 taskId) } } -static void Task_SwapFadeSpeciesName(u8 taskId) +static void Swap_Task_FadeSpeciesName(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 0: - sFactorySwapScreen->unk27 = 0; - sFactorySwapScreen->unk28 = 0; - sFactorySwapScreen->unk26 = TRUE; - gTasks[taskId].data[0] = 1; + case FADESTATE_INIT: + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; + sFactorySwapScreen->fadeSpeciesNameCoeff = 0; + sFactorySwapScreen->fadeSpeciesNameFadeOut = TRUE; + gTasks[taskId].tState = FADESTATE_RUN; break; - case 1: - if (sFactorySwapScreen->unk22) + case FADESTATE_RUN: + if (sFactorySwapScreen->fadeSpeciesNameActive) { - if (sFactorySwapScreen->unk29) + if (sFactorySwapScreen->faceSpeciesNameDelay) { - gTasks[taskId].data[0] = 2; + gTasks[taskId].tState = FADESTATE_DELAY; } else { - sFactorySwapScreen->unk27++; - if (sFactorySwapScreen->unk27 > 6) + sFactorySwapScreen->fadeSpeciesNameCoeffDelay++; + if (sFactorySwapScreen->fadeSpeciesNameCoeffDelay > 6) { - sFactorySwapScreen->unk27 = 0; - if (!sFactorySwapScreen->unk26) - sFactorySwapScreen->unk28--; + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; + if (!sFactorySwapScreen->fadeSpeciesNameFadeOut) + sFactorySwapScreen->fadeSpeciesNameCoeff--; else - sFactorySwapScreen->unk28++; + sFactorySwapScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); - if (sFactorySwapScreen->unk28 > 5) + BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); + if (sFactorySwapScreen->fadeSpeciesNameCoeff > 5) { - sFactorySwapScreen->unk26 = FALSE; + sFactorySwapScreen->fadeSpeciesNameFadeOut = FALSE; } - else if (sFactorySwapScreen->unk28 == 0) + else if (sFactorySwapScreen->fadeSpeciesNameCoeff == 0) { - gTasks[taskId].data[0] = 2; - sFactorySwapScreen->unk26 = TRUE; + gTasks[taskId].tState = FADESTATE_DELAY; + sFactorySwapScreen->fadeSpeciesNameFadeOut = TRUE; } } } break; - case 2: - if (sFactorySwapScreen->unk29 > 14) + case FADESTATE_DELAY: + if (sFactorySwapScreen->faceSpeciesNameDelay > 14) { - sFactorySwapScreen->unk29 = 0; - gTasks[taskId].data[0] = 1; + sFactorySwapScreen->faceSpeciesNameDelay = 0; + gTasks[taskId].tState = FADESTATE_RUN; } else { - sFactorySwapScreen->unk29++; + sFactorySwapScreen->faceSpeciesNameDelay++; } break; } } -static void Task_SwapFadeSpeciesName2(u8 taskId) +#define tFadeOutFinished data[4] + +static void Swap_Task_FadeOutSpeciesName(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - sFactorySwapScreen->unk27 = 0; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[0]++; + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; + gTasks[taskId].tFadeOutFinished = FALSE; + gTasks[taskId].tState++; break; case 1: LoadPalette(&gPlttBufferUnfaded[0xF0], 0xE0, 0xA); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: - if (sFactorySwapScreen->unk28 > 15) + if (sFactorySwapScreen->fadeSpeciesNameCoeff > 15) { - gTasks[taskId].data[4] = 1; - gTasks[taskId].data[0]++; + gTasks[taskId].tFadeOutFinished = TRUE; + gTasks[taskId].tState++; } - sFactorySwapScreen->unk27++; - if (sFactorySwapScreen->unk27 > 3) + sFactorySwapScreen->fadeSpeciesNameCoeffDelay++; + if (sFactorySwapScreen->fadeSpeciesNameCoeffDelay > 3) { - sFactorySwapScreen->unk27 = 0; + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; gPlttBufferUnfaded[244] = gPlttBufferFaded[228]; - sFactorySwapScreen->unk28++; + sFactorySwapScreen->fadeSpeciesNameCoeff++; } - BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); + BlendPalettes(0x4000, sFactorySwapScreen->fadeSpeciesNameCoeff, 0); break; } } -static void sub_819D12C(u8 taskId) +// Slide current pokeballs offscreen to the right and new pokeballs onscreen from +// the left during transition between player's/enemy's party screens +#define tBallCycled(i) data[(i) + 1] +static void Swap_Task_SlideCycleBalls(u8 taskId) { s8 i; - u8 var_2C; - bool8 destroyTask; + u8 lastX; + bool8 finished; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[0] = 1; + gTasks[taskId].tBallCycled(0) = FALSE; + gTasks[taskId].tBallCycled(1) = FALSE; + gTasks[taskId].tBallCycled(2) = FALSE; + gTasks[taskId].tState = 1; break; case 1: - var_2C = 0; - for (i = 2; i >= 0; i--) + lastX = 0; + for (i = FRONTIER_PARTY_SIZE - 1; i >= 0; i--) { - if (i != 2) + if (i != FRONTIER_PARTY_SIZE - 1) { - u8 posX = var_2C - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; - if (posX == 16 || gTasks[taskId].data[i + 2] == 1) + u8 posX = lastX - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + if (posX == 16 || gTasks[taskId].tBallCycled(i + 1) == TRUE) { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + lastX = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; } else if (posX > 16) @@ -2693,402 +2806,449 @@ static void sub_819D12C(u8 taskId) } else { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + lastX = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; } - if (gTasks[taskId].data[i + 1] == 1) + if (gTasks[taskId].tBallCycled(i) == TRUE) { + // New ball coming in from left, check if it has reached dest if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x > (i * 48) + 72) { + // Overshot dest, set x and finish gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = (i * 48) + 72; - destroyTask = TRUE; + finished = TRUE; } else if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x == (i * 48) + 72) { - destroyTask = TRUE; + finished = TRUE; } else { - destroyTask = FALSE; + finished = FALSE; } } else { - destroyTask = FALSE; + finished = FALSE; } - if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x - 16 > 240) + if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x - 16 > DISPLAY_WIDTH) { - var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + // Ball is offscreen right, cycle its palette and move to left side of screen + lastX = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = -16; if (sFactorySwapScreen->inEnemyScreen == TRUE) - gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_SELECTED); else - gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(PALTAG_BALL_GRAY); - gTasks[taskId].data[i + 1] = 1; + gTasks[taskId].tBallCycled(i) = TRUE; } } - if (destroyTask == TRUE) + if (finished == TRUE) DestroyTask(taskId); break; } } -static void sub_819D324(u8 taskId) +// For sliding the action buttons (Cancel, Pkmn for Swap) on/off screen + +#define SLIDE_BUTTON_PKMN 0 +#define SLIDE_BUTTON_CANCEL 1 + +#define tTaskId data[1] +#define tSlidingOn data[2] +#define tXIncrement data[3] + +// Data to be used by the task that creates this task +#define tSecondSlideDelay data[2] +#define tSlideFinishedPkmn data[3] +#define tSlideFinishedCancel data[4] + +static void Swap_Task_SlideButtonOnOffScreen(u8 taskId) { u8 i, j; s32 posX = 0; - s8 r4 = gTasks[taskId].data[3]; - bool8 r1; + s8 deltaX = gTasks[taskId].tXIncrement; + bool8 sliding; s16 currPosX; - u8 taskId2; + u8 prevTaskId; - if (gTasks[taskId].data[2] == 1) - r4 *= -1; + if (gTasks[taskId].tSlidingOn == TRUE) + deltaX *= -1; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { - case 0: - currPosX = gSprites[sFactorySwapScreen->unk8[0][0]].pos1.x; - if (!gTasks[taskId].data[2]) + case SLIDE_BUTTON_PKMN: + currPosX = gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][0]].pos1.x; + if (!gTasks[taskId].tSlidingOn) { - if (currPosX + r4 < 240) + // Sliding "Pkmn for Swap" offscreen + if (currPosX + deltaX < DISPLAY_WIDTH) { - r1 = TRUE; + sliding = TRUE; } else { - r1 = FALSE; - posX = 240; + sliding = FALSE; + posX = DISPLAY_WIDTH; } } else { - if (currPosX + r4 > 160) + // Sliding "Pkmn for Swap" onscreen + if (currPosX + deltaX > 160) { - r1 = TRUE; + sliding = TRUE; } else { - r1 = FALSE; + sliding = FALSE; posX = 160; } } - if (r1 == TRUE) + if (sliding == TRUE) { - for (i = 0; i < 3; i++) + // Do movement + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) { - for (j = 0; j < 2; j++) - gSprites[sFactorySwapScreen->unk8[j][i]].pos1.x += r4; + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds); j++) + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][i]].pos1.x += deltaX; } } else { - for (j = 0; j < 2; j++) + // Set final position + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds); j++) { - gSprites[sFactorySwapScreen->unk8[j][0]].pos1.x = posX; - gSprites[sFactorySwapScreen->unk8[j][1]].pos1.x = posX + 16; - gSprites[sFactorySwapScreen->unk8[j][2]].pos1.x = posX + 48; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][0]].pos1.x = posX; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][1]].pos1.x = posX + 16; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[j][2]].pos1.x = posX + 48; } - taskId2 = gTasks[taskId].data[1]; - gTasks[taskId2].data[3] = 1; + prevTaskId = gTasks[taskId].tTaskId; + gTasks[prevTaskId].tSlideFinishedPkmn = TRUE; DestroyTask(taskId); } break; - case 1: - currPosX = gSprites[sFactorySwapScreen->unkE[0][0]].pos1.x; - if (!gTasks[taskId].data[2]) + case SLIDE_BUTTON_CANCEL: + currPosX = gSprites[sFactorySwapScreen->cancelButtonSpriteIds[0][0]].pos1.x; + if (!gTasks[taskId].tSlidingOn) { - if (currPosX + r4 < 240) + // Sliding "Cancel" offscreen + if (currPosX + deltaX < DISPLAY_WIDTH) { - r1 = TRUE; + sliding = TRUE; } else { - r1 = FALSE; - posX = 240; + sliding = FALSE; + posX = DISPLAY_WIDTH; } } else { - if (currPosX + r4 > 192) + // Sliding "Cancel" onscreen + if (currPosX + deltaX > 192) { - r1 = TRUE; + sliding = TRUE; } else { - r1 = FALSE; + sliding = FALSE; posX = 192; } } - if (r1 == TRUE) + if (sliding == TRUE) { - for (i = 0; i < 2; i++) + // Do movement + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds); i++) { - for (j = 0; j < 2; j++) - gSprites[sFactorySwapScreen->unkE[j][i]].pos1.x += r4; + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0]); j++) + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][i]].pos1.x += deltaX; } } else { - for (j = 0; j < 2; j++) + // Set final position + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds); j++) { - gSprites[sFactorySwapScreen->unkE[j][0]].pos1.x = posX; - gSprites[sFactorySwapScreen->unkE[j][1]].pos1.x = posX + 16; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][0]].pos1.x = posX; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[j][1]].pos1.x = posX + 16; } - taskId2 = gTasks[taskId].data[1]; - gTasks[taskId2].data[4] = 1; + prevTaskId = gTasks[taskId].tTaskId; + gTasks[prevTaskId].tSlideFinishedCancel = TRUE; DestroyTask(taskId); } break; } } -static void sub_819D588(u8 taskId) +// Slide action buttons offscreen +static void Swap_Task_ScreenInfoTransitionOut(u8 taskId) { - u8 anotherTaskId; - u16 loPtr, hiPtr; + u8 slideTaskId; + u16 hiPtr, loPtr; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); + LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); Swap_PrintActionStrings(); - PutWindowTilemap(5); - gTasks[taskId].data[0]++; + PutWindowTilemap(SWAP_WIN_ACTION_FADE); + gTasks[taskId].tState++; break; case 1: - sub_819EA64(3); - gTasks[taskId].data[0]++; + Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); + gTasks[taskId].tState++; break; case 2: - BeginNormalPaletteFade(0x4000, 0, 0, 0x10, gUnknown_0860F13C[37]); - gTasks[taskId].data[0]++; + BeginNormalPaletteFade(0x4000, 0, 0, 16, sPokeballGray_Pal[37]); + gTasks[taskId].tState++; break; case 3: if (!gPaletteFade.active) { - FillWindowPixelBuffer(5, PIXEL_FILL(0)); - CopyWindowToVram(5, 2); + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); if (sFactorySwapScreen->inEnemyScreen == TRUE) { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 0; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[2] = 5; - gTasks[taskId].data[0]++; + // Start "Pkmn for Swap" button slide offscreen + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedPkmn = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_PKMN; + gTasks[slideTaskId].tSlidingOn = FALSE; + gTasks[slideTaskId].tXIncrement = 6; + gTasks[taskId].tSecondSlideDelay = 5; + gTasks[taskId].tState++; } else { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0] += 2; + // Start "Cancel" button slide offscreen + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedPkmn = TRUE; + gTasks[taskId].tSlideFinishedCancel = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_CANCEL; + gTasks[slideTaskId].tSlidingOn = FALSE; + gTasks[slideTaskId].tXIncrement = 6; + gTasks[taskId].tState += 2; } } break; case 4: - if (gTasks[taskId].data[2] == 0) + // Start "Cancel" button slide offscreen for screens with both buttons + if (gTasks[taskId].tSecondSlideDelay == 0) { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; - gTasks[anotherTaskId].data[2] = 0; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0]++; + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedCancel = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_CANCEL; + gTasks[slideTaskId].tSlidingOn = FALSE; + gTasks[slideTaskId].tXIncrement = 6; + gTasks[taskId].tState++; } else { - gTasks[taskId].data[2]--; + gTasks[taskId].tSecondSlideDelay--; } break; case 5: - if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) + if (gTasks[taskId].tSlideFinishedPkmn == TRUE + && gTasks[taskId].tSlideFinishedCancel == TRUE) { - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - loPtr = gTasks[taskId].data[6]; - hiPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); + gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; + gTasks[taskId].func = (void *)((hiPtr << 16) | (loPtr)); } break; } } -static void sub_819D770(u8 taskId) +// Slide action buttons onscreen, reprint swap dialogue and mon info +static void Swap_Task_ScreenInfoTransitionIn(u8 taskId) { - u8 anotherTaskId; - u16 loPtr, hiPtr; - if (sFactorySwapScreen->unk30 == TRUE) + u8 slideTaskId; + u16 hiPtr, loPtr; + if (sFactorySwapScreen->monPicAnimating == TRUE) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (sFactorySwapScreen->inEnemyScreen == TRUE) { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 0; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[2] = 10; - gTasks[taskId].data[0]++; + // Start "Pkmn for Swap" button slide onscreen + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedPkmn = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_PKMN; + gTasks[slideTaskId].tSlidingOn = TRUE; + gTasks[slideTaskId].tXIncrement = 6; + gTasks[taskId].tSecondSlideDelay = 10; + gTasks[taskId].tState++; } else { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0] += 2; + // Start "Cancel" button slide onscreen + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedPkmn = TRUE; + gTasks[taskId].tSlideFinishedCancel = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_CANCEL; + gTasks[slideTaskId].tSlidingOn = TRUE; + gTasks[slideTaskId].tXIncrement = 6; + gTasks[taskId].tState += 2; } break; case 1: - if (gTasks[taskId].data[2] == 0) + // Start "Cancel" button slide onscreen for screens with both buttons + if (gTasks[taskId].tSecondSlideDelay == 0) { - anotherTaskId = CreateTask(sub_819D324, 0); - gTasks[taskId].data[4] = 0; - gTasks[anotherTaskId].data[1] = taskId; - gTasks[anotherTaskId].data[0] = 1; - gTasks[anotherTaskId].data[2] = 1; - gTasks[anotherTaskId].data[3] = 6; - gTasks[taskId].data[0]++; + slideTaskId = CreateTask(Swap_Task_SlideButtonOnOffScreen, 0); + gTasks[taskId].tSlideFinishedCancel = FALSE; + gTasks[slideTaskId].tTaskId = taskId; + gTasks[slideTaskId].tState = SLIDE_BUTTON_CANCEL; + gTasks[slideTaskId].tSlidingOn = TRUE; + gTasks[slideTaskId].tXIncrement = 6; + gTasks[taskId].tState++; } else { - gTasks[taskId].data[2]--; + gTasks[taskId].tSecondSlideDelay--; } break; case 2: - if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) + if (gTasks[taskId].tSlideFinishedPkmn == TRUE + && gTasks[taskId].tSlideFinishedCancel == TRUE) { - gPlttBufferFaded[226] = gUnknown_0860F13C[37]; + gPlttBufferFaded[226] = sPokeballGray_Pal[37]; Swap_PrintActionStrings(); - PutWindowTilemap(5); - gTasks[taskId].data[0]++; + PutWindowTilemap(SWAP_WIN_ACTION_FADE); + gTasks[taskId].tState++; } break; case 3: - BeginNormalPaletteFade(0x4000, 0, 0x10, 0, gUnknown_0860F13C[37]); - gTasks[taskId].data[0]++; + BeginNormalPaletteFade(0x4000, 0, 16, 0, sPokeballGray_Pal[37]); + gTasks[taskId].tState++; break; case 4: if (!gPaletteFade.active) { Swap_PrintOneActionString(0); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; } break; case 5: Swap_PrintOneActionString(1); - PutWindowTilemap(3); - gTasks[taskId].data[0]++; + PutWindowTilemap(SWAP_WIN_OPTIONS); + gTasks[taskId].tState++; break; case 6: - FillWindowPixelBuffer(5, PIXEL_FILL(0)); - CopyWindowToVram(5, 2); - gTasks[taskId].data[0]++; + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); + gTasks[taskId].tState++; break; case 7: if (!sFactorySwapScreen->inEnemyScreen) Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); else Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); - if (sFactorySwapScreen->cursorPos < 3) + if (sFactorySwapScreen->cursorPos < FRONTIER_PARTY_SIZE) gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; Swap_PrintMonCategory(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 8: - Swap_PrintMonSpecies3(); - sub_819EADC(); - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - loPtr = gTasks[taskId].data[6]; - hiPtr = gTasks[taskId].data[7]; - gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); + Swap_PrintMonSpeciesForTransition(); + Swap_EraseSpeciesAtFadeWindow(); + sFactorySwapScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; + hiPtr = gTasks[taskId].tFollowUpTaskPtrHi; + loPtr = gTasks[taskId].tFollowUpTaskPtrLo; + gTasks[taskId].func = (void *)((hiPtr << 16) | (loPtr)); break; } } -static void sub_819D9EC(u8 taskId) +#undef tTaskId +#undef tSlidingOn +#undef tXIncrement +#undef tSlideFinishedPkmn +#undef tSlideFinishedCancel + +// For switching between the swap screens with the player's / enemy's parties +static void Swap_Task_SwitchPartyScreen(u8 taskId) { u8 i; - if (sFactorySwapScreen->unk30 == TRUE) + if (sFactorySwapScreen->monPicAnimating == TRUE) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - Swap_PrintMonSpecies3(); - gTasks[taskId].data[0]++; + Swap_PrintMonSpeciesForTransition(); + gTasks[taskId].tState++; break; case 1: - sub_819EADC(); + Swap_EraseSpeciesAtFadeWindow(); gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 2: - CreateTask(sub_819D12C, 0); - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName2; - gTasks[taskId].data[0]++; + CreateTask(Swap_Task_SlideCycleBalls, 0); + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Swap_Task_FadeOutSpeciesName; + gTasks[taskId].tState++; break; case 3: - if (!FuncIsActiveTask(sub_819D12C) && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[4] == 1) + if (!FuncIsActiveTask(Swap_Task_SlideCycleBalls) + && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tFadeOutFinished == TRUE) { - sub_819EAC0(); + Swap_EraseSpeciesWindow(); if (!sFactorySwapScreen->inEnemyScreen) { - Swap_InitActions(ACTIONS_ENEMY_SCREEN); + Swap_InitActions(SWAP_ENEMY_SCREEN); } else { - Swap_InitActions(ACTIONS_PLAYER_SCREEN); - for (i = 0; i < 3; i++) - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + Swap_InitActions(SWAP_PLAYER_SCREEN); + + // Hide "Pkmn for Swap" button + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = TRUE; } gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x; - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName; - sFactorySwapScreen->unk27 = 0; - sFactorySwapScreen->unk28 = 6; - sFactorySwapScreen->unk26 = FALSE; - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; - gTasks[taskId].data[0]++; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Swap_Task_FadeSpeciesName; + sFactorySwapScreen->fadeSpeciesNameCoeffDelay = 0; + sFactorySwapScreen->fadeSpeciesNameCoeff = 6; + sFactorySwapScreen->fadeSpeciesNameFadeOut = FALSE; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = FADESTATE_RUN; + gTasks[taskId].tState++; } break; case 4: - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; break; } } +#undef tFadeOutFinished + static void Swap_InitStruct(void) { if (sFactorySwapScreen == NULL) { sFactorySwapScreen = AllocZeroed(sizeof(*sFactorySwapScreen)); sFactorySwapScreen->cursorPos = 0; - sFactorySwapScreen->unk30 = FALSE; + sFactorySwapScreen->monPicAnimating = FALSE; sFactorySwapScreen->fromSummaryScreen = FALSE; } } @@ -3117,9 +3277,9 @@ static void CB2_InitSwapScreen(void) break; case 1: sSwapMenuTilesetBuffer = Alloc(0x440); - sSwapMonCardBgTilesetBuffer = AllocZeroed(0x440); - sSwapMenuTilemapBuffer = Alloc(0x800); - sSwapMonCardBgTilemapBuffer = AllocZeroed(0x800); + sSwapMonPicBgTilesetBuffer = AllocZeroed(0x440); + sSwapMenuTilemapBuffer = Alloc(BG_SCREEN_SIZE); + sSwapMonPicBgTilemapBuffer = AllocZeroed(BG_SCREEN_SIZE); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -3145,32 +3305,36 @@ static void CB2_InitSwapScreen(void) FreeAllSpritePalettes(); ResetAllPicSprites(); CpuCopy16(gFrontierFactorySelectMenu_Gfx, sSwapMenuTilesetBuffer, 0x440); - CpuCopy16(gUnknown_0861033C, sSwapMonCardBgTilesetBuffer, 0x60); + CpuCopy16(sMonPicBg_Gfx, sSwapMonPicBgTilesetBuffer, 0x60); LoadBgTiles(1, sSwapMenuTilesetBuffer, 0x440, 0); - LoadBgTiles(3, sSwapMonCardBgTilesetBuffer, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, 0x800); - LoadBgTilemap(1, sSwapMenuTilemapBuffer, 0x800, 0); + LoadBgTiles(3, sSwapMonPicBgTilesetBuffer, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE); + LoadBgTilemap(1, sSwapMenuTilemapBuffer, BG_SCREEN_SIZE, 0); LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(gUnknown_08610918, 0xF0, sizeof(gUnknown_08610918)); - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); - LoadPalette(gUnknown_0861039C, 0x20, 4); + LoadPalette(sSwapText_Pal, 0xF0, sizeof(sSwapText_Pal)); + LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); + LoadPalette(sMonPicBg_Pal, 0x20, 4); gMain.state++; break; case 3: - SetBgTilemapBuffer(3, sSwapMonCardBgTilemapBuffer); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); + SetBgTilemapBuffer(3, sSwapMonPicBgTilemapBuffer); + CopyToBgTilemapBufferRect(3, sMonPicBg_Tilemap, 11, 4, 8, 8); CopyBgTilemapBufferToVram(3); gMain.state++; break; case 4: - LoadSpritePalettes(gUnknown_086106B0); - LoadSpriteSheets(gUnknown_08610650); - LoadCompressedSpriteSheet(gUnknown_086106A0); + LoadSpritePalettes(sSwap_SpritePalettes); + LoadSpriteSheets(sSwap_SpriteSheets); + LoadCompressedSpriteSheet(sSwap_BallGfx); SetVBlankCallback(Swap_VblankCb); gMain.state++; break; case 5: +#ifdef UBFIX + if (sFactorySwapScreen && sFactorySwapScreen->fromSummaryScreen) +#else if (sFactorySwapScreen->fromSummaryScreen == TRUE) +#endif sFactorySwapScreen->cursorPos = gLastViewedMonIndex; gMain.state++; break; @@ -3179,28 +3343,28 @@ static void CB2_InitSwapScreen(void) Swap_InitAllSprites(); if (sFactorySwapScreen->fromSummaryScreen == TRUE) Swap_ShowSummaryMonSprite(); - Swap_InitActions(ACTIONS_PLAYER_SCREEN); + Swap_InitActions(SWAP_PLAYER_SCREEN); gMain.state++; break; case 7: Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); - PutWindowTilemap(2); + PutWindowTilemap(SWAP_WIN_INFO); gMain.state++; break; case 8: Swap_PrintMonCategory(); - PutWindowTilemap(8); + PutWindowTilemap(SWAP_WIN_MON_CATEGORY); gMain.state++; break; case 9: if (!sFactorySwapScreen->fromSummaryScreen) Swap_PrintMonSpecies(); - PutWindowTilemap(1); + PutWindowTilemap(SWAP_WIN_SPECIES); gMain.state++; break; case 10: Swap_PrintPkmnSwap(); - PutWindowTilemap(0); + PutWindowTilemap(SWAP_WIN_TITLE); gMain.state++; break; case 11: @@ -3208,16 +3372,16 @@ static void CB2_InitSwapScreen(void) break; case 12: if (sFactorySwapScreen->fromSummaryScreen) - Swap_PrintMonSpecies2(); + Swap_PrintMonSpeciesAtFade(); gMain.state++; break; case 13: Swap_PrintActionStrings2(); - PutWindowTilemap(3); + PutWindowTilemap(SWAP_WIN_OPTIONS); gMain.state++; break; case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); ShowBg(0); ShowBg(1); @@ -3235,20 +3399,20 @@ static void CB2_InitSwapScreen(void) gMain.state++; break; case 15: - sFactorySwapScreen->fadeSpeciesNameTaskId = CreateTask(Task_SwapFadeSpeciesName, 0); + sFactorySwapScreen->fadeSpeciesNameTaskId = CreateTask(Swap_Task_FadeSpeciesName, 0); if (!sFactorySwapScreen->fromSummaryScreen) { - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 0; - taskId = CreateTask(Task_HandleSwapScreenChooseMons, 0); - gTasks[taskId].data[0] = 0; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = FADESTATE_INIT; + taskId = CreateTask(Swap_Task_HandleChooseMons, 0); + gTasks[taskId].tState = STATE_CHOOSE_MONS_INIT; } else { - sub_819EAF8(); - gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; - sFactorySwapScreen->unk22 = FALSE; - taskId = CreateTask(Task_HandleSwapScreenMenu, 0); - gTasks[taskId].data[0] = 2; + Swap_EraseActionFadeWindow(); + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].tState = FADESTATE_RUN; + sFactorySwapScreen->fadeSpeciesNameActive = FALSE; + taskId = CreateTask(Swap_Task_HandleMenu, 0); + gTasks[taskId].tState = STATE_MENU_INIT; } SetMainCallback2(Swap_CB2); break; @@ -3261,17 +3425,17 @@ static void Swap_InitAllSprites(void) u8 x; struct SpriteTemplate spriteTemplate; - spriteTemplate = gUnknown_08610834; - spriteTemplate.paletteTag = TAG_PAL_BALL_SELECTED; + spriteTemplate = sSpriteTemplate_Swap_Pokeball; + spriteTemplate.paletteTag = PALTAG_BALL_SELECTED; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { sFactorySwapScreen->ballSpriteIds[i] = CreateSprite(&spriteTemplate, (48 * i) + 72, 64, 1); gSprites[sFactorySwapScreen->ballSpriteIds[i]].data[0] = 0; } - sFactorySwapScreen->cursorSpriteId = CreateSprite(&gUnknown_0861084C, gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x, 88, 0); - sFactorySwapScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610864, 176, 112, 0); - sFactorySwapScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_0861087C, 176, 144, 0); + sFactorySwapScreen->cursorSpriteId = CreateSprite(&sSpriteTemplate_Swap_Arrow, gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x, 88, 0); + sFactorySwapScreen->menuCursor1SpriteId = CreateSprite(&sSpriteTemplate_Swap_MenuHighlightLeft, 176, 112, 0); + sFactorySwapScreen->menuCursor2SpriteId = CreateSprite(&sSpriteTemplate_Swap_MenuHighlightRight, 176, 144, 0); gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; gSprites[sFactorySwapScreen->menuCursor1SpriteId].centerToCornerVecX = 0; @@ -3280,105 +3444,110 @@ static void Swap_InitAllSprites(void) gSprites[sFactorySwapScreen->menuCursor2SpriteId].centerToCornerVecY = 0; if (sFactorySwapScreen->fromSummaryScreen == TRUE) - x = 240; + x = DISPLAY_WIDTH; else - x = 192; + x = DISPLAY_WIDTH - 48; - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_68; - sFactorySwapScreen->unk8[0][0] = CreateSprite(&spriteTemplate, 240, 120, 10); + // Unusual way to create sprites + // The sprite template for the selector arrow is re-used + // with the tiles swapped out + spriteTemplate = sSpriteTemplate_Swap_Arrow; + spriteTemplate.tileTag = GFXTAG_ACTION_BOX_LEFT; + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][0] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH, 120, 10); - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_69; - sFactorySwapScreen->unk8[0][1] = CreateSprite(&spriteTemplate, 256, 120, 10); - sFactorySwapScreen->unk8[0][2] = CreateSprite(&spriteTemplate, 288, 120, 10); + spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; + spriteTemplate.tileTag = GFXTAG_ACTION_BOX_RIGHT; + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][1] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH + 16, 120, 10); + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][2] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH + 48, 120, 10); - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_6A; - sFactorySwapScreen->unk8[1][0] = CreateSprite(&spriteTemplate, 240, 120, 1); + spriteTemplate = sSpriteTemplate_Swap_Arrow; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_LEFT; + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][0] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH, 120, 1); - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_6B; - sFactorySwapScreen->unk8[1][1] = CreateSprite(&spriteTemplate, 256, 120, 1); - spriteTemplate.tileTag = TAG_TILE_6C; - sFactorySwapScreen->unk8[1][2] = CreateSprite(&spriteTemplate, 288, 120, 1); + spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_MIDDLE; + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][1] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH + 16, 120, 1); + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_RIGHT; + sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][2] = CreateSprite(&spriteTemplate, DISPLAY_WIDTH + 48, 120, 1); - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_68; - sFactorySwapScreen->unkE[0][0] = CreateSprite(&spriteTemplate, x, 144, 10); + spriteTemplate = sSpriteTemplate_Swap_Arrow; + spriteTemplate.tileTag = GFXTAG_ACTION_BOX_LEFT; + sFactorySwapScreen->cancelButtonSpriteIds[0][0] = CreateSprite(&spriteTemplate, x, 144, 10); - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_69; - sFactorySwapScreen->unkE[0][1] = CreateSprite(&spriteTemplate, x + 16, 144, 10); + spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; + spriteTemplate.tileTag = GFXTAG_ACTION_BOX_RIGHT; + sFactorySwapScreen->cancelButtonSpriteIds[0][1] = CreateSprite(&spriteTemplate, x + 16, 144, 10); - spriteTemplate = gUnknown_0861084C; - spriteTemplate.tileTag = TAG_TILE_6A; - sFactorySwapScreen->unkE[1][0] = CreateSprite(&spriteTemplate, x, 144, 1); + spriteTemplate = sSpriteTemplate_Swap_Arrow; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_LEFT; + sFactorySwapScreen->cancelButtonSpriteIds[1][0] = CreateSprite(&spriteTemplate, x, 144, 1); - spriteTemplate = gUnknown_08610864; - spriteTemplate.tileTag = TAG_TILE_6C; - sFactorySwapScreen->unkE[1][1] = CreateSprite(&spriteTemplate, x + 16, 144, 1); + spriteTemplate = sSpriteTemplate_Swap_MenuHighlightLeft; + spriteTemplate.tileTag = GFXTAG_ACTION_HIGHLIGHT_RIGHT; + sFactorySwapScreen->cancelButtonSpriteIds[1][1] = CreateSprite(&spriteTemplate, x + 16, 144, 1); for (i = 0; i < 2; i++) { - gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][0]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][0]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][1]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][1]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][2]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][2]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][0]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][0]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][1]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][1]].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk8[i][0]].invisible = TRUE; - gSprites[sFactorySwapScreen->unk8[i][1]].invisible = TRUE; - gSprites[sFactorySwapScreen->unk8[i][2]].invisible = TRUE; - gSprites[sFactorySwapScreen->unkE[i][0]].invisible = TRUE; - gSprites[sFactorySwapScreen->unkE[i][1]].invisible = TRUE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][0]].invisible = TRUE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][1]].invisible = TRUE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][2]].invisible = TRUE; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][0]].invisible = TRUE; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][1]].invisible = TRUE; } - gSprites[sFactorySwapScreen->unkE[0][0]].invisible = FALSE; - gSprites[sFactorySwapScreen->unkE[0][1]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][0]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][1]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[0][2]].invisible = FALSE; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[0][0]].invisible = FALSE; + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[0][1]].invisible = FALSE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][0]].invisible = FALSE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][1]].invisible = FALSE; + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0][2]].invisible = FALSE; } static void Swap_DestroyAllSprites(void) { u8 i, j; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) DestroySprite(&gSprites[sFactorySwapScreen->ballSpriteIds[i]]); DestroySprite(&gSprites[sFactorySwapScreen->cursorSpriteId]); DestroySprite(&gSprites[sFactorySwapScreen->menuCursor1SpriteId]); DestroySprite(&gSprites[sFactorySwapScreen->menuCursor2SpriteId]); - for (i = 0; i < 2; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds); i++) { - for (j = 0; j < 3; j++) - DestroySprite(&gSprites[sFactorySwapScreen->unk8[i][j]]); + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); j++) + DestroySprite(&gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[i][j]]); } - for (i = 0; i < 2; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds); i++) { - for (j = 0; j < 2; j++) - DestroySprite(&gSprites[sFactorySwapScreen->unkE[i][j]]); + for (j = 0; j < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0]); j++) + DestroySprite(&gSprites[sFactorySwapScreen->cancelButtonSpriteIds[i][j]]); } } static void Swap_HandleActionCursorChange(u8 cursorId) { - if (cursorId < 3) + if (cursorId < FRONTIER_PARTY_SIZE) { + // Cursor is on one of the pokemon gSprites[sFactorySwapScreen->cursorSpriteId].invisible = FALSE; - sub_819E8EC(); + Swap_HideActionButtonHighlights(); gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[cursorId]].pos1.x; } else { + // Cursor is on an action button gSprites[sFactorySwapScreen->cursorSpriteId].invisible = TRUE; - sub_819E838(sFactorySwapScreen->actionsData[cursorId].id); + Swap_HighlightActionButton(sFactorySwapScreen->actionsData[cursorId].id); } } @@ -3411,8 +3580,8 @@ static void Swap_UpdateActionCursorPosition(s8 direction) PlaySE(SE_SELECT); if (direction > 0) // Move cursor down. { - if (sFactorySwapScreen->cursorPos < 3) - sFactorySwapScreen->cursorPos = 3; + if (sFactorySwapScreen->cursorPos < FRONTIER_PARTY_SIZE) + sFactorySwapScreen->cursorPos = FRONTIER_PARTY_SIZE; else if (sFactorySwapScreen->cursorPos + 1 != sFactorySwapScreen->actionsCount) sFactorySwapScreen->cursorPos++; else @@ -3420,7 +3589,7 @@ static void Swap_UpdateActionCursorPosition(s8 direction) } else // Move cursor up. { - if (sFactorySwapScreen->cursorPos < 3) + if (sFactorySwapScreen->cursorPos < FRONTIER_PARTY_SIZE) sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; else if (sFactorySwapScreen->cursorPos != 0) sFactorySwapScreen->cursorPos--; @@ -3458,7 +3627,7 @@ static void Swap_UpdateMenuCursorPosition(s8 direction) PlaySE(SE_SELECT); if (direction > 0) // Move cursor down. { - if (sFactorySwapScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) + if (sFactorySwapScreen->menuCursorPos != ARRAY_COUNT(sSwap_MenuOptionFuncs) - 1) sFactorySwapScreen->menuCursorPos++; else sFactorySwapScreen->menuCursorPos = 0; @@ -3468,43 +3637,52 @@ static void Swap_UpdateMenuCursorPosition(s8 direction) if (sFactorySwapScreen->menuCursorPos != 0) sFactorySwapScreen->menuCursorPos--; else - sFactorySwapScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; + sFactorySwapScreen->menuCursorPos = ARRAY_COUNT(sSwap_MenuOptionFuncs) - 1; } gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; } -static void sub_819E838(u8 arg0) +static void Swap_HighlightActionButton(u8 actionId) { u8 i; - for (i = 0; i < 3; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) { - if (arg0 == 2) + if (actionId == SWAPACTION_PKMN_FOR_SWAP) { - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = FALSE; - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = TRUE; + // Show button highlight on "Pkmn for Swap" + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = FALSE; + + // Hide button highlight on Cancel + if (i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0])) + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[1][i]].invisible = TRUE; } - else if (arg0 == 3) + else if (actionId == SWAPACTION_CANCEL) { - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = FALSE; - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; + // Show button highlight on Cancel + if (i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0])) + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[1][i]].invisible = FALSE; + + // Hide button highlight on "Pkmn for Swap" + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = TRUE; } } } -static void sub_819E8EC(void) +static void Swap_HideActionButtonHighlights(void) { u8 i; - for (i = 0; i < 3; i++) + for (i = 0; i < ARRAY_COUNT(sFactorySwapScreen->pkmnForSwapButtonSpriteIds[0]); i++) { - gSprites[sFactorySwapScreen->unk8[1][i]].invisible = TRUE; - if (i < 2) - gSprites[sFactorySwapScreen->unkE[1][i]].invisible = TRUE; + // Hide button highlight on "Pkmn for Swap" + gSprites[sFactorySwapScreen->pkmnForSwapButtonSpriteIds[1][i]].invisible = TRUE; + + // Hide button highlight on Cancel + if (i < ARRAY_COUNT(sFactorySwapScreen->cancelButtonSpriteIds[0])) + gSprites[sFactorySwapScreen->cancelButtonSpriteIds[1][i]].invisible = TRUE; } } @@ -3541,7 +3719,7 @@ static void Swap_ShowYesNoOptions(void) Swap_PrintYesNoOptions(); } -static void sub_819EA64(u8 windowId) +static void Swap_ErasePopupMenu(u8 windowId) { gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = TRUE; gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = TRUE; @@ -3550,33 +3728,33 @@ static void sub_819EA64(u8 windowId) ClearWindowTilemap(windowId); } -static void sub_819EAC0(void) +static void Swap_EraseSpeciesWindow(void) { - PutWindowTilemap(1); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - CopyWindowToVram(1, 2); + PutWindowTilemap(SWAP_WIN_SPECIES); + FillWindowPixelBuffer(SWAP_WIN_SPECIES, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_SPECIES, 2); } -static void sub_819EADC(void) +static void Swap_EraseSpeciesAtFadeWindow(void) { - PutWindowTilemap(7); - FillWindowPixelBuffer(7, PIXEL_FILL(0)); - CopyWindowToVram(7, 2); + PutWindowTilemap(SWAP_WIN_SPECIES_AT_FADE); + FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 2); } -static void sub_819EAF8(void) +static void Swap_EraseActionFadeWindow(void) { - sub_819EAC0(); - PutWindowTilemap(5); - FillWindowPixelBuffer(5, PIXEL_FILL(0)); - CopyWindowToVram(5, 2); + Swap_EraseSpeciesWindow(); + PutWindowTilemap(SWAP_WIN_ACTION_FADE); + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); } static void Swap_PrintPkmnSwap(void) { - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 1, gText_PkmnSwap, 2, 1, 0, NULL); - CopyWindowToVram(0, 3); + FillWindowPixelBuffer(SWAP_WIN_TITLE, PIXEL_FILL(1)); + AddTextPrinterParameterized(SWAP_WIN_TITLE, 1, gText_PkmnSwap, 2, 1, 0, NULL); + CopyWindowToVram(SWAP_WIN_TITLE, 3); } static void Swap_PrintMonSpecies(void) @@ -3584,10 +3762,10 @@ static void Swap_PrintMonSpecies(void) u16 species; u8 x; - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - if (sFactorySwapScreen->cursorPos > 2) + FillWindowPixelBuffer(SWAP_WIN_SPECIES, PIXEL_FILL(0)); + if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(1, 2); + CopyWindowToVram(SWAP_WIN_SPECIES, 2); } else { @@ -3598,35 +3776,35 @@ static void Swap_PrintMonSpecies(void) species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(1, 3); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES, 3); } } static void Swap_PrintOnInfoWindow(const u8 *str) { - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); - CopyWindowToVram(2, 2); + FillWindowPixelBuffer(SWAP_WIN_INFO, PIXEL_FILL(0)); + AddTextPrinterParameterized(SWAP_WIN_INFO, 1, str, 2, 5, 0, NULL); + CopyWindowToVram(SWAP_WIN_INFO, 2); } static void Swap_PrintMenuOptions(void) { - PutWindowTilemap(3); - FillWindowPixelBuffer(3, PIXEL_FILL(0)); - AddTextPrinterParameterized3(3, 1, 15, 1, sSwapMenuOptionsTextColors, 0, gText_Summary2); - AddTextPrinterParameterized3(3, 1, 15, 17, sSwapMenuOptionsTextColors, 0, gText_Swap); - AddTextPrinterParameterized3(3, 1, 15, 33, sSwapMenuOptionsTextColors, 0, gText_Rechoose); - CopyWindowToVram(3, 3); + PutWindowTilemap(SWAP_WIN_OPTIONS); + FillWindowPixelBuffer(SWAP_WIN_OPTIONS, PIXEL_FILL(0)); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 1, sSwapMenuOptionsTextColors, 0, gText_Summary2); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 17, sSwapMenuOptionsTextColors, 0, gText_Swap); + AddTextPrinterParameterized3(SWAP_WIN_OPTIONS, 1, 15, 33, sSwapMenuOptionsTextColors, 0, gText_Rechoose); + CopyWindowToVram(SWAP_WIN_OPTIONS, 3); } static void Swap_PrintYesNoOptions(void) { - PutWindowTilemap(4); - FillWindowPixelBuffer(4, PIXEL_FILL(0)); - AddTextPrinterParameterized3(4, 1, 7, 1, sSwapMenuOptionsTextColors, 0, gText_Yes3); - AddTextPrinterParameterized3(4, 1, 7, 17, sSwapMenuOptionsTextColors, 0, gText_No3); - CopyWindowToVram(4, 3); + PutWindowTilemap(SWAP_WIN_YES_NO); + FillWindowPixelBuffer(SWAP_WIN_YES_NO, PIXEL_FILL(0)); + AddTextPrinterParameterized3(SWAP_WIN_YES_NO, 1, 7, 1, sSwapMenuOptionsTextColors, 0, gText_Yes3); + AddTextPrinterParameterized3(SWAP_WIN_YES_NO, 1, 7, 17, sSwapMenuOptionsTextColors, 0, gText_No3); + CopyWindowToVram(SWAP_WIN_YES_NO, 3); } static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) @@ -3637,30 +3815,30 @@ static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) static void Swap_PrintActionStrings(void) { - FillWindowPixelBuffer(5, PIXEL_FILL(0)); + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); switch (sFactorySwapScreen->inEnemyScreen) { case TRUE: - Swap_PrintActionString(gText_PkmnForSwap, 0, 5); + Swap_PrintActionString(gText_PkmnForSwap, 0, SWAP_WIN_ACTION_FADE); case FALSE: - Swap_PrintActionString(gText_Cancel3, 24, 5); + Swap_PrintActionString(gText_Cancel3, 24, SWAP_WIN_ACTION_FADE); break; } - CopyWindowToVram(5, 3); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 3); } static void Swap_PrintActionStrings2(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(0)); + FillWindowPixelBuffer(SWAP_WIN_OPTIONS, PIXEL_FILL(0)); switch (sFactorySwapScreen->inEnemyScreen) { case TRUE: - Swap_PrintActionString(gText_PkmnForSwap, 8, 3); + Swap_PrintActionString(gText_PkmnForSwap, 8, SWAP_WIN_OPTIONS); case FALSE: - Swap_PrintActionString(gText_Cancel3, 32, 3); + Swap_PrintActionString(gText_Cancel3, 32, SWAP_WIN_OPTIONS); break; } - CopyWindowToVram(3, 3); + CopyWindowToVram(SWAP_WIN_OPTIONS, 3); } static void Swap_PrintOneActionString(u8 which) @@ -3669,33 +3847,34 @@ static void Swap_PrintOneActionString(u8 which) { case 0: if (sFactorySwapScreen->inEnemyScreen == TRUE) - Swap_PrintActionString(gText_PkmnForSwap, 8, 3); + Swap_PrintActionString(gText_PkmnForSwap, 8, SWAP_WIN_OPTIONS); break; case 1: - Swap_PrintActionString(gText_Cancel3, 32, 3); + Swap_PrintActionString(gText_Cancel3, 32, SWAP_WIN_OPTIONS); break; } - CopyWindowToVram(3, 3); + CopyWindowToVram(SWAP_WIN_OPTIONS, 3); } -static void Swap_PrintMonSpecies2(void) +// For printing the species name once its selected. Keep the current fade but don't keep fading in and out +static void Swap_PrintMonSpeciesAtFade(void) { u16 species; u8 x; u16 pal[5]; - CpuCopy16(gUnknown_08610918, pal, 8); + CpuCopy16(sSwapText_Pal, pal, 8); if (!sFactorySwapScreen->fromSummaryScreen) pal[4] = gPlttBufferFaded[228]; else - pal[4] = sFactorySwapScreen->unk24; - LoadPalette(pal, 0xF0, 0xA); + pal[4] = sFactorySwapScreen->speciesNameColorBackup; + LoadPalette(pal, 0xF0, sizeof(sSwapText_Pal)); - PutWindowTilemap(7); - FillWindowPixelBuffer(7, PIXEL_FILL(0)); - if (sFactorySwapScreen->cursorPos > 2) + PutWindowTilemap(SWAP_WIN_SPECIES_AT_FADE); + FillWindowPixelBuffer(SWAP_WIN_SPECIES_AT_FADE, PIXEL_FILL(0)); + if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(7, 3); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 3); } else { @@ -3706,22 +3885,23 @@ static void Swap_PrintMonSpecies2(void) species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(7, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(7, 3); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES_AT_FADE, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES_AT_FADE, 3); } } -static void Swap_PrintMonSpecies3(void) +// Reprints the species name over the faded one after a transition +static void Swap_PrintMonSpeciesForTransition(void) { u16 species; u8 x; - LoadPalette(gUnknown_08610918, 0xE0, sizeof(gUnknown_08610918)); - CpuCopy16(gPlttBufferUnfaded + 240, gPlttBufferFaded + 224, 10); + LoadPalette(sSwapText_Pal, 0xE0, sizeof(sSwapText_Pal)); + CpuCopy16(&gPlttBufferUnfaded[240], &gPlttBufferFaded[224], 10); - if (sFactorySwapScreen->cursorPos > 2) + if (sFactorySwapScreen->cursorPos >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(1, 2); + CopyWindowToVram(SWAP_WIN_SPECIES, 2); } else { @@ -3732,8 +3912,8 @@ static void Swap_PrintMonSpecies3(void) species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); - AddTextPrinterParameterized3(1, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); - CopyWindowToVram(1, 3); + AddTextPrinterParameterized3(SWAP_WIN_SPECIES, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4); + CopyWindowToVram(SWAP_WIN_SPECIES, 3); } } @@ -3744,22 +3924,22 @@ static void Swap_PrintMonCategory(void) u8 x; u8 monId = sFactorySwapScreen->cursorPos; - FillWindowPixelBuffer(8, PIXEL_FILL(0)); - if (monId > 2) + FillWindowPixelBuffer(SWAP_WIN_MON_CATEGORY, PIXEL_FILL(0)); + if (monId >= FRONTIER_PARTY_SIZE) { - CopyWindowToVram(8, 2); + CopyWindowToVram(SWAP_WIN_MON_CATEGORY, 2); } else { - PutWindowTilemap(8); + PutWindowTilemap(SWAP_WIN_MON_CATEGORY); if (!sFactorySwapScreen->inEnemyScreen) species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); x = GetStringRightAlignXOffset(1, text, 0x76); - AddTextPrinterParameterized(8, 1, text, x, 1, 0, NULL); - CopyWindowToVram(8, 2); + AddTextPrinterParameterized(SWAP_WIN_MON_CATEGORY, 1, text, x, 1, 0, NULL); + CopyWindowToVram(SWAP_WIN_MON_CATEGORY, 2); } } @@ -3769,13 +3949,13 @@ static void Swap_InitActions(u8 id) { switch (id) { - case ACTIONS_PLAYER_SCREEN: + case SWAP_PLAYER_SCREEN: sFactorySwapScreen->inEnemyScreen = FALSE; sFactorySwapScreen->cursorPos = 0; sFactorySwapScreen->actionsCount = ARRAY_COUNT(sSwap_PlayerScreenActions); sFactorySwapScreen->actionsData = sSwap_PlayerScreenActions; break; - case ACTIONS_ENEMY_SCREEN: + case SWAP_ENEMY_SCREEN: sFactorySwapScreen->inEnemyScreen = TRUE; sFactorySwapScreen->cursorPos = 0; sFactorySwapScreen->actionsCount = ARRAY_COUNT(sSwap_EnemyScreenActions); @@ -3787,92 +3967,94 @@ static void Swap_InitActions(u8 id) static void Swap_RunMenuOptionFunc(u8 taskId) { - sSwap_CurrentTableFunc = sSwap_MenuOptionFuncs[sFactorySwapScreen->menuCursorPos]; - sSwap_CurrentTableFunc(taskId); + sSwap_CurrentOptionFunc = sSwap_MenuOptionFuncs[sFactorySwapScreen->menuCursorPos]; + sSwap_CurrentOptionFunc(taskId); } -static void sub_819F0CC(u8 taskId) +static void Swap_OptionSwap(u8 taskId) { - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); sFactorySwapScreen->playerMonId = sFactorySwapScreen->cursorPos; - sub_819EA64(3); - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_819D9EC; + Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); + gTasks[taskId].tState = 0; + gTasks[taskId].func = Swap_Task_SwitchPartyScreen; } -static void sub_819F114(u8 taskId) +static void Swap_OptionSummary(u8 taskId) { - gTasks[taskId].data[0] = 6; - gTasks[taskId].func = Task_FromSwapScreenToSummaryScreen; + gTasks[taskId].tState = STATE_SUMMARY_FADE; + gTasks[taskId].func = Swap_Task_OpenSummaryScreen; } -static void sub_819F134(u8 taskId) +static void Swap_OptionRechoose(u8 taskId) { - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - sub_819EA64(3); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = sub_819D770; + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); + Swap_ErasePopupMenu(SWAP_WIN_OPTIONS); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleChooseMons) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleChooseMons); + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionIn; } static void Swap_RunActionFunc(u8 taskId) { - sSwap_CurrentTableFunc = sFactorySwapScreen->actionsData[sFactorySwapScreen->cursorPos].func; - sSwap_CurrentTableFunc(taskId); + sSwap_CurrentOptionFunc = sFactorySwapScreen->actionsData[sFactorySwapScreen->cursorPos].func; + sSwap_CurrentOptionFunc(taskId); } static void Swap_ActionCancel(u8 taskId) { - gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819CC24); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 0; - gTasks[taskId].func = sub_819D588; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_AskQuitSwapping) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_AskQuitSwapping); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskState = 0; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionOut; } static void Swap_ActionPkmnForSwap(u8 taskId) { - gTasks[taskId].data[6] = (u32)(sub_819D9EC) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819D9EC); - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_819D588; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_SwitchPartyScreen) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_SwitchPartyScreen); + gTasks[taskId].tFollowUpTaskState = 0; + gTasks[taskId].tState = 0; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionOut; } static void Swap_ActionMon(u8 taskId) { if (!sFactorySwapScreen->inEnemyScreen) { - gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenMenu) >> 0x10; - gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenMenu); - gTasks[taskId].data[5] = 2; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_Task_HandleMenu) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_Task_HandleMenu); + gTasks[taskId].tFollowUpTaskState = STATE_MENU_INIT; } else if (Swap_AlreadyHasSameSpecies(sFactorySwapScreen->cursorPos) == TRUE) { - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[5] = 1; - gTasks[taskId].func = Task_SwapCantHaveSameMons; + OpenMonPic(&sFactorySwapScreen->monPic.bgSpriteId, &sFactorySwapScreen->monPicAnimating, TRUE); + gTasks[taskId].tState = 0; + gTasks[taskId].tFollowUpTaskState = STATE_CHOOSE_MONS_HANDLE_INPUT; + gTasks[taskId].func = Swap_TaskCantHaveSameMons; return; } else { - gTasks[taskId].data[6] = (u32)(sub_819CCD4) >> 0x10; - gTasks[taskId].data[7] = (u32)(sub_819CCD4); - gTasks[taskId].data[5] = 0; + gTasks[taskId].tFollowUpTaskPtrHi = (u32)(Swap_AskAcceptMon) >> 16; + gTasks[taskId].tFollowUpTaskPtrLo = (u32)(Swap_AskAcceptMon); + gTasks[taskId].tFollowUpTaskState = 0; } - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_819D588; + gTasks[taskId].tState = 0; + gTasks[taskId].func = Swap_Task_ScreenInfoTransitionOut; } -static void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen) +#define sIsSwapScreen data[7] + +static void OpenMonPic(u8 *spriteId, bool8 *animating, bool8 swapScreen) { - *arg0 = CreateSprite(&gUnknown_08610894, 120, 64, 1); - gSprites[*arg0].callback = sub_819F600; - gSprites[*arg0].data[7] = swapScreen; - *arg1 = TRUE; + *spriteId = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); + gSprites[*spriteId].callback = SpriteCB_OpenMonPic; + gSprites[*spriteId].sIsSwapScreen = swapScreen; + *animating = TRUE; } static void Swap_ShowSummaryMonSprite(void) @@ -3881,79 +4063,83 @@ static void Swap_ShowSummaryMonSprite(void) u16 species; u32 personality, otId; - sFactorySwapScreen->unk2C.field1 = CreateSprite(&gUnknown_08610894, 120, 64, 1); - StartSpriteAffineAnim(&gSprites[sFactorySwapScreen->unk2C.field1], 2); + sFactorySwapScreen->monPic.bgSpriteId = CreateSprite(&sSpriteTemplate_Swap_MonPicBgAnim, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[sFactorySwapScreen->monPic.bgSpriteId], 2); mon = &gPlayerParty[sFactorySwapScreen->cursorPos]; species = GetMonData(mon, MON_DATA_SPECIES, NULL); personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); // BUG: otId and personality should be switched. - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; +#ifdef BUGFIX + sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); +#else + sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); +#endif + gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecY = 0; - gSprites[sFactorySwapScreen->unk2C.field1].invisible = TRUE; + gSprites[sFactorySwapScreen->monPic.bgSpriteId].invisible = TRUE; } -static void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen) +static void CloseMonPic(struct FactoryMonPic pic, bool8 *animating, bool8 swapScreen) { u8 taskId; - FreeAndDestroyMonPicSprite(arg0.field0); - taskId = CreateTask(sub_819F7B4, 1); - gTasks[taskId].data[7] = swapScreen; - gTasks[taskId].data[6] = arg0.field1; + FreeAndDestroyMonPicSprite(pic.monSpriteId); + taskId = CreateTask(Task_CloseMonPic, 1); + gTasks[taskId].tIsSwapScreen = swapScreen; + gTasks[taskId].tSpriteId = pic.bgSpriteId; gTasks[taskId].func(taskId); - *arg1 = TRUE; + *animating = TRUE; } -static void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1) +static void HideMonPic(struct FactoryMonPic pic, bool8 *animating) { - FreeAndDestroyMonPicSprite(arg0.field0); - FreeOamMatrix(gSprites[arg0.field1].oam.matrixNum); - DestroySprite(&gSprites[arg0.field1]); - *arg1 = FALSE; + FreeAndDestroyMonPicSprite(pic.monSpriteId); + FreeOamMatrix(gSprites[pic.bgSpriteId].oam.matrixNum); + DestroySprite(&gSprites[pic.bgSpriteId]); + *animating = FALSE; } -static void Task_SwapCantHaveSameMons(u8 taskId) +static void Swap_TaskCantHaveSameMons(u8 taskId) { - if (sFactorySwapScreen->unk30 == TRUE) + if (sFactorySwapScreen->monPicAnimating == TRUE) return; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: Swap_PrintOnInfoWindow(gText_SamePkmnInPartyAlready); sFactorySwapScreen->monSwapped = FALSE; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 1: if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); - gTasks[taskId].data[0]++; + CloseMonPic(sFactorySwapScreen->monPic, &sFactorySwapScreen->monPicAnimating, TRUE); + gTasks[taskId].tState++; } break; case 2: - if (sFactorySwapScreen->unk30 != TRUE) + if (sFactorySwapScreen->monPicAnimating != TRUE) { - FillWindowPixelBuffer(5, PIXEL_FILL(0)); - CopyWindowToVram(5, 2); - gTasks[taskId].data[0]++; + FillWindowPixelBuffer(SWAP_WIN_ACTION_FADE, PIXEL_FILL(0)); + CopyWindowToVram(SWAP_WIN_ACTION_FADE, 2); + gTasks[taskId].tState++; } break; case 3: Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 4: - Swap_PrintMonSpecies3(); - sub_819EADC(); - sFactorySwapScreen->unk22 = TRUE; - gTasks[taskId].data[0] = gTasks[taskId].data[5]; - gTasks[taskId].func = Task_HandleSwapScreenChooseMons; + Swap_PrintMonSpeciesForTransition(); + Swap_EraseSpeciesAtFadeWindow(); + sFactorySwapScreen->fadeSpeciesNameActive = TRUE; + gTasks[taskId].tState = gTasks[taskId].tFollowUpTaskState; + gTasks[taskId].func = Swap_Task_HandleChooseMons; break; } } @@ -3963,7 +4149,7 @@ static bool8 Swap_AlreadyHasSameSpecies(u8 monId) u8 i; u16 species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { if (i != sFactorySwapScreen->playerMonId && (u16)(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL)) == species) return TRUE; @@ -3971,120 +4157,126 @@ static bool8 Swap_AlreadyHasSameSpecies(u8 monId) return FALSE; } -static void sub_819F600(struct Sprite *sprite) +static void SpriteCB_OpenMonPic(struct Sprite *sprite) { u8 taskId; if (sprite->affineAnimEnded) { sprite->invisible = TRUE; - taskId = CreateTask(sub_819F69C, 1); - gTasks[taskId].data[7] = sprite->data[7]; + taskId = CreateTask(Task_OpenMonPic, 1); + gTasks[taskId].tIsSwapScreen = sprite->sIsSwapScreen; gTasks[taskId].func(taskId); sprite->callback = SpriteCallbackDummy; } } -static void sub_819F654(struct Sprite *sprite) +static void SpriteCB_CloseMonPic(struct Sprite *sprite) { if (sprite->affineAnimEnded) { FreeOamMatrix(sprite->oam.matrixNum); - if (sprite->data[7] == TRUE) - sFactorySwapScreen->unk30 = FALSE; + if (sprite->sIsSwapScreen == TRUE) + sFactorySwapScreen->monPicAnimating = FALSE; else - sub_819BE20(FALSE); + Select_SetMonPicAnimating(FALSE); DestroySprite(sprite); } } -static void sub_819F69C(u8 taskId) +static void Task_OpenMonPic(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: - task->data[3] = 88; - task->data[24] = 152; // BUG: writing outside the array's bounds. - task->data[5] = 64; - task->data[8] = 65; + // Init + task->tWinLeft = 88; + task->tWinRight = DISPLAY_WIDTH - 88; + task->tWinTop = 64; + task->tWinBottom = 65; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); break; case 1: + // Show mon pic bg ShowBg(3); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); break; case 2: - task->data[5] -= 4; - task->data[8] += 4; - if (task->data[5] <= 32 || task->data[8] >= 96) + // Animate mon pic bg + task->tWinTop -= 4; + task->tWinBottom += 4; + if (task->tWinTop <= 32 || task->tWinBottom >= 96) { - task->data[5] = 32; - task->data[8] = 96; + task->tWinTop = 32; + task->tWinBottom = 96; } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] != 32) + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + if (task->tWinTop != 32) return; break; default: DestroyTask(taskId); // UB: Should not use the task after it has been deleted. - if (gTasks[taskId].data[7] == TRUE) - Swap_ShowMonSprite(); + if (gTasks[taskId].tIsSwapScreen == TRUE) + Swap_CreateMonSprite(); else - Summary_ShowMonSprite(); + Select_CreateMonSprite(); return; } - task->data[0]++; + task->tState++; } -static void sub_819F7B4(u8 taskId) +static void Task_CloseMonPic(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { + case 0: + // Init + task->tWinLeft = 88; + task->tWinRight = DISPLAY_WIDTH - 88; + task->tWinTop = 32; + task->tWinBottom = 96; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->tWinLeft, task->tWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); + task->tState++; + break; + case 1: + // Animate bg + task->tWinTop += 4; + task->tWinBottom -= 4; + if (task->tWinTop >= 64 || task->tWinBottom <= 65) + { + task->tWinTop = 64; + task->tWinBottom = 65; + } + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->tWinTop, task->tWinBottom)); + if (task->tWinTop == 64) + task->tState++; + break; default: + // Hide bg HideBg(3); - gSprites[task->data[6]].data[7] = task->data[7]; - gSprites[task->data[6]].invisible = FALSE; - gSprites[task->data[6]].callback = sub_819F654; - StartSpriteAffineAnim(&gSprites[task->data[6]], 1); + gSprites[task->tSpriteId].sIsSwapScreen = task->tIsSwapScreen; + gSprites[task->tSpriteId].invisible = FALSE; + gSprites[task->tSpriteId].callback = SpriteCB_CloseMonPic; + StartSpriteAffineAnim(&gSprites[task->tSpriteId], 1); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); DestroyTask(taskId); break; - case 0: - task->data[3] = 88; - task->data[24] = 152; // BUG: writing outside the array's bounds. - task->data[5] = 32; - task->data[8] = 96; - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[24])); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); - task->data[0]++; - break; - case 1: - task->data[5] += 4; - task->data[8] -= 4; - if (task->data[5] >= 64 || task->data[8] <= 65) - { - task->data[5] = 64; - task->data[8] = 65; - } - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[8])); - if (task->data[5] == 64) - task->data[0]++; - break; } } -static void Swap_ShowMonSprite(void) +static void Swap_CreateMonSprite(void) { struct Pokemon *mon; u16 species; @@ -4099,9 +4291,9 @@ static void Swap_ShowMonSprite(void) personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; - gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; + sFactorySwapScreen->monPic.monSpriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->monPic.monSpriteId].centerToCornerVecY = 0; - sFactorySwapScreen->unk30 = FALSE; + sFactorySwapScreen->monPicAnimating = FALSE; } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index e3e63f0e84..77b91f1f41 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -6,6 +6,7 @@ #include "constants/battle_anim.h" #include "battle_interface.h" #include "main.h" +#include "dma3.h" #include "malloc.h" #include "graphics.h" #include "random.h" @@ -17,7 +18,6 @@ #include "sound.h" #include "party_menu.h" #include "m4a.h" -#include "constants/species.h" #include "decompress.h" #include "data.h" #include "palette.h" @@ -568,7 +568,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) otId = GetMonData(mon, MON_DATA_OT_ID); position = GetBattlerPosition(battlerId); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], species, currentPersonality); paletteOffset = 0x100 + battlerId * 16; @@ -624,13 +624,13 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (sub_80688F8(1, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], species, currentPersonality); } else { HandleLoadSpecialPokePic(&gMonBackPicTable[species], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], species, currentPersonality); } @@ -672,7 +672,7 @@ void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId) { u8 position = GetBattlerPosition(battlerId); DecompressPicFromTable_2(&gTrainerFrontPicTable[frontPicId], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], SPECIES_NONE); LoadCompressedSpritePalette(&gTrainerFrontPicPaletteTable[frontPicId]); } @@ -681,7 +681,7 @@ void DecompressTrainerBackPic(u16 backPicId, u8 battlerId) { u8 position = GetBattlerPosition(battlerId); DecompressPicFromTable_2(&gTrainerBackPicTable[backPicId], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], SPECIES_NONE); LoadCompressedPalette(gTrainerBackPicPaletteTable[backPicId].data, 0x100 + 16 * battlerId, 0x20); @@ -921,7 +921,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform otId = gContestResources->moveAnim->otId; HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites[0], + gMonSpritesGfxPtr->sprites.ptr[0], targetSpecies, gContestResources->moveAnim->targetPersonality); } @@ -940,7 +940,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], targetSpecies, gTransformedPersonalities[battlerAtk]); } @@ -950,13 +950,13 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_OT_ID); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[targetSpecies], - gMonSpritesGfxPtr->sprites[position], + gMonSpritesGfxPtr->sprites.ptr[position], targetSpecies, gTransformedPersonalities[battlerAtk]); } } - src = gMonSpritesGfxPtr->sprites[position]; + src = gMonSpritesGfxPtr->sprites.ptr[position]; dst = (void *)(OBJ_VRAM0 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); DmaCopy32(3, src, dst, 0x800); paletteOffset = 0x100 + battlerAtk * 16; @@ -997,29 +997,29 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) position = GetBattlerPosition(battlerId); if (IsContest()) - LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]); + LZDecompressVram(gSubstituteDollBackGfx, gMonSpritesGfxPtr->sprites.ptr[position]); else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - LZDecompressVram(gSubstituteDollGfx, gMonSpritesGfxPtr->sprites[position]); + LZDecompressVram(gSubstituteDollFrontGfx, gMonSpritesGfxPtr->sprites.ptr[position]); else - LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]); + LZDecompressVram(gSubstituteDollBackGfx, gMonSpritesGfxPtr->sprites.ptr[position]); for (i = 1; i < 4; i++) { - u8 (*ptr)[4][0x800] = gMonSpritesGfxPtr->sprites[position]; - ptr++;ptr--; // Needed to match. - - DmaCopy32Defvars(3, (*ptr)[0], (*ptr)[i], 0x800); + Dma3CopyLarge32_(gMonSpritesGfxPtr->sprites.ptr[position], &gMonSpritesGfxPtr->sprites.byte[position][0x800 * i], 0x800); } palOffset = (battlerId * 16) + 0x100; LoadCompressedPalette(gSubstituteDollPal, palOffset, 32); } - else if (!IsContest()) + else { - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); - else - BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); + if (!IsContest()) + { + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); + else + BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); + } } } @@ -1245,12 +1245,12 @@ void AllocateMonSpritesGfx(void) for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - gMonSpritesGfxPtr->sprites[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000); + gMonSpritesGfxPtr->sprites.ptr[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000); *(gMonSpritesGfxPtr->templates + i) = gUnknown_08329D98[i]; for (j = 0; j < 4; j++) { - gMonSpritesGfxPtr->field_74[i][j].data = gMonSpritesGfxPtr->sprites[i] + (j * 0x800); + gMonSpritesGfxPtr->field_74[i][j].data = gMonSpritesGfxPtr->sprites.ptr[i] + (j * 0x800); gMonSpritesGfxPtr->field_74[i][j].size = 0x800; } @@ -1272,10 +1272,10 @@ void FreeMonSpritesGfx(void) FREE_AND_SET_NULL(gMonSpritesGfxPtr->barFontGfx); FREE_AND_SET_NULL(gMonSpritesGfxPtr->firstDecompressed); - gMonSpritesGfxPtr->sprites[0] = NULL; - gMonSpritesGfxPtr->sprites[1] = NULL; - gMonSpritesGfxPtr->sprites[2] = NULL; - gMonSpritesGfxPtr->sprites[3] = NULL; + gMonSpritesGfxPtr->sprites.ptr[0] = NULL; + gMonSpritesGfxPtr->sprites.ptr[1] = NULL; + gMonSpritesGfxPtr->sprites.ptr[2] = NULL; + gMonSpritesGfxPtr->sprites.ptr[3] = NULL; FREE_AND_SET_NULL(gMonSpritesGfxPtr); } diff --git a/src/battle_interface.c b/src/battle_interface.c index 719af6a064..adbef019d8 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -15,7 +15,6 @@ #include "util.h" #include "gpu_regs.h" #include "battle_message.h" -#include "constants/species.h" #include "pokedex.h" #include "palette.h" #include "international_string_util.h" diff --git a/src/battle_intro.c b/src/battle_intro.c index 6964428a35..36ff325f51 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -586,7 +586,7 @@ void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *ar int i, j; u8 battler = GetBattlerAtPosition(battlerPosition); int offset = tilesOffset; - CpuCopy16(gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE); + CpuCopy16(gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE); LoadBgTiles(bgId, arg5, 0x1000, tilesOffset); for (i = arg2; i < arg2 + 8; i++) { @@ -604,7 +604,7 @@ void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u { int i, j, offset; - DmaCopy16(3, gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE); + DmaCopy16(3, gMonSpritesGfxPtr->sprites.ptr[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE); offset = (arg5 >> 5) - (arg7 << 9); for (i = arg1; i < arg1 + 8; i++) { diff --git a/src/battle_main.c b/src/battle_main.c index bf0fdc1aad..df56dccf90 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -58,7 +58,6 @@ #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" #include "cable_club.h" @@ -128,7 +127,6 @@ static void HandleEndTurn_RanFromBattle(void); static void HandleEndTurn_MonFled(void); static void HandleEndTurn_FinishBattle(void); - // EWRAM vars EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -634,16 +632,19 @@ static void CB2_InitBattleInternal(void) gBattle_WIN0V = 0x5051; ScanlineEffect_Clear(); - for (i = 0; i < 80; i++) + i = 0; + while (i < 80) { gScanlineEffectRegBuffers[0][i] = 0xF0; gScanlineEffectRegBuffers[1][i] = 0xF0; + i++; } - for (; i < 160; i++) + while (i < 160) { gScanlineEffectRegBuffers[0][i] = 0xFF10; gScanlineEffectRegBuffers[1][i] = 0xFF10; + i++; } ScanlineEffect_SetParams(sIntroScanlineParams16Bit); @@ -770,7 +771,8 @@ static void SetPlayerBerryDataInBattleStruct(void) static void SetAllPlayersBerryData(void) { - s32 i, j; + s32 i; + s32 j; if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) { @@ -1355,7 +1357,7 @@ static void CB2_HandleStartMultiPartnerBattle(void) case 16: if (BattleInitAllSprites(&gBattleCommunication[SPRITES_INIT_STATE1], &gBattleCommunication[SPRITES_INIT_STATE2])) { - sub_8166188(); + TrySetLinkBattleTowerEnemyPartyLevel(); gPreBattleCallback1 = gMain.callback1; gMain.callback1 = BattleMainCB1; SetMainCallback2(BattleMainCB2); @@ -1967,7 +1969,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir nameHash += gSpeciesNames[partyData[i].species][j]; personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; + fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); break; } @@ -1979,7 +1981,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir nameHash += gSpeciesNames[partyData[i].species][j]; personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; + fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); for (j = 0; j < MAX_MON_MOVES; j++) @@ -1997,7 +1999,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir nameHash += gSpeciesNames[partyData[i].species][j]; personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; + fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); @@ -2011,7 +2013,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir nameHash += gSpeciesNames[partyData[i].species][j]; personalityValue += nameHash << 8; - fixedIV = partyData[i].iv * 31 / 255; + fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); @@ -2686,7 +2688,8 @@ static void sub_80398BC(struct Sprite *sprite) // unused? static void sub_80398D0(struct Sprite *sprite) { - if (--sprite->data[4] == 0) + sprite->data[4]--; + if (sprite->data[4] == 0) { sprite->data[4] = 8; sprite->invisible ^= 1; @@ -2762,7 +2765,7 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite) } else // Erase bottom part of the sprite to create a smooth illusion of mon falling down. { - u8 *dst = (u8 *)gMonSpritesGfxPtr->sprites[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8); + u8* dst = gMonSpritesGfxPtr->sprites.byte[GetBattlerPosition(sprite->sBattler)] + (gBattleMonForms[sprite->sBattler] << 11) + (sprite->data[3] << 8); for (i = 0; i < 0x100; i++) *(dst++) = 0; @@ -3417,13 +3420,17 @@ static void BattleIntroDrawTrainersOrMonsSprites(void) } } - if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - BtlController_EmitDrawTrainerPic(0); - MarkBattlerForControllerExec(gActiveBattler); + if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT + || GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) + { + BtlController_EmitDrawTrainerPic(0); + MarkBattlerForControllerExec(gActiveBattler); + } } - if ((gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT)) + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS && GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_RIGHT) { BtlController_EmitDrawTrainerPic(0); MarkBattlerForControllerExec(gActiveBattler); @@ -3530,7 +3537,7 @@ static void BattleIntroPrintWildMonAttacked(void) static void BattleIntroPrintOpponentSendsOut(void) { - u8 position; + u32 position; if (gBattleControllerExecFlags) return; @@ -3553,7 +3560,7 @@ static void BattleIntroPrintOpponentSendsOut(void) static void BattleIntroOpponent2SendsOutMonAnimation(void) { - u8 position; + u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) position = B_POSITION_OPPONENT_RIGHT; @@ -3581,7 +3588,7 @@ static void BattleIntroOpponent2SendsOutMonAnimation(void) static void BattleIntroOpponent1SendsOutMonAnimation(void) { - u8 position; + u32 position; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { @@ -3596,9 +3603,7 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void) position = B_POSITION_OPPONENT_LEFT; } else - { position = B_POSITION_OPPONENT_LEFT; - } if (gBattleControllerExecFlags) return; @@ -3640,7 +3645,7 @@ static void BattleIntroRecordMonsToDex(void) } } -static void sub_803B3AC(void) // unused +void sub_803B3AC(void) // unused { if (gBattleControllerExecFlags == 0) gBattleMainFunc = BattleIntroPrintPlayerSendsOut; @@ -3673,7 +3678,7 @@ static void BattleIntroPrintPlayerSendsOut(void) static void BattleIntroPlayer2SendsOutMonAnimation(void) { - u8 position; + u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) position = B_POSITION_PLAYER_RIGHT; @@ -3705,7 +3710,7 @@ static void BattleIntroPlayer2SendsOutMonAnimation(void) static void BattleIntroPlayer1SendsOutMonAnimation(void) { - u8 position; + u32 position; if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED)) position = B_POSITION_PLAYER_LEFT; @@ -3743,7 +3748,7 @@ static void BattleIntroPlayer1SendsOutMonAnimation(void) gBattleMainFunc = TryDoEventsBeforeFirstTurn; } -static void sub_803B598(void) // unused +void sub_803B598(void) // unused { if (gBattleControllerExecFlags == 0) { @@ -3766,7 +3771,8 @@ static void sub_803B598(void) // unused static void TryDoEventsBeforeFirstTurn(void) { - s32 i, j; + s32 i; + s32 j; u8 effect = 0; if (gBattleControllerExecFlags) @@ -3956,7 +3962,11 @@ u8 IsRunningFromBattleImpossible(void) gPotentialItemEffectBattler = gActiveBattler; - if ((holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) || (gBattleTypeFlags & BATTLE_TYPE_LINK) || (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY)) + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + return 0; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + return 0; + if (gBattleMons[gActiveBattler].ability == ABILITY_RUN_AWAY) return 0; side = GetBattlerSide(gActiveBattler); @@ -4733,38 +4743,40 @@ static void SetActionsAndBattlersTurnOrder(void) gBattleStruct->focusPunchBattlerId = 0; return; } - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + else { - if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) { - gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; - gBattlerByTurnOrder[turnOrderId] = gActiveBattler; - turnOrderId++; - } - } - for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) - { - if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) - { - gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; - gBattlerByTurnOrder[turnOrderId] = gActiveBattler; - turnOrderId++; - } - } - for (i = 0; i < gBattlersCount - 1; i++) - { - for (j = i + 1; j < gBattlersCount; j++) - { - u8 battler1 = gBattlerByTurnOrder[i]; - u8 battler2 = gBattlerByTurnOrder[j]; - - if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM - && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM - && gActionsByTurnOrder[i] != B_ACTION_SWITCH - && gActionsByTurnOrder[j] != B_ACTION_SWITCH) + if (gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_ITEM || gChosenActionByBattler[gActiveBattler] == B_ACTION_SWITCH) { - if (GetWhoStrikesFirst(battler1, battler2, FALSE)) - SwapTurnOrder(i, j); + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + turnOrderId++; + } + } + for (gActiveBattler = 0; gActiveBattler < gBattlersCount; gActiveBattler++) + { + if (gChosenActionByBattler[gActiveBattler] != B_ACTION_USE_ITEM && gChosenActionByBattler[gActiveBattler] != B_ACTION_SWITCH) + { + gActionsByTurnOrder[turnOrderId] = gChosenActionByBattler[gActiveBattler]; + gBattlerByTurnOrder[turnOrderId] = gActiveBattler; + turnOrderId++; + } + } + for (i = 0; i < gBattlersCount - 1; i++) + { + for (j = i + 1; j < gBattlersCount; j++) + { + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + if (gActionsByTurnOrder[i] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[j] != B_ACTION_USE_ITEM + && gActionsByTurnOrder[i] != B_ACTION_SWITCH + && gActionsByTurnOrder[j] != B_ACTION_SWITCH) + { + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); + } } } } @@ -4842,8 +4854,8 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) } TryClearRageStatuses(); - gCurrentTurnActionNumber = 0; //See comment underneath - gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; //Should be gActionsByTurnOrder[(gCurrentTurnActionNumber = 0)], but that doesn't match + gCurrentTurnActionNumber = 0; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; gDynamicBasePower = 0; gBattleStruct->dynamicMoveType = 0; gBattleMainFunc = RunTurnActionsFunctions; @@ -4866,10 +4878,13 @@ static void RunTurnActionsFunctions(void) gHitMarker &= ~(HITMARKER_x100000); gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; } - else if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId + else { - gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); - gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + if (gBattleStruct->savedTurnActionNumber != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another battlerId + { + gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); + gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + } } } @@ -4986,15 +5001,15 @@ static void HandleEndTurn_RanFromBattle(void) { switch (gProtectStructs[gBattlerAttacker].fleeFlag) { + default: + gBattlescriptCurrInstr = BattleScript_GotAwaySafely; + break; case 1: gBattlescriptCurrInstr = BattleScript_SmokeBallEscape; break; case 2: gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility; break; - default: - gBattlescriptCurrInstr = BattleScript_GotAwaySafely; - break; } } @@ -5078,7 +5093,10 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) gBattleMainFunc = ReturnFromBattleToOverworld; return; } - gBattleMainFunc = TryEvolvePokemon; + else + { + gBattleMainFunc = TryEvolvePokemon; + } } FreeAllWindowBuffers(); @@ -5173,4 +5191,3 @@ void RunBattleScriptCommands(void) if (gBattleControllerExecFlags == 0) gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } - diff --git a/src/battle_message.c b/src/battle_message.c index c004665d75..0f5ec507d0 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -180,7 +180,7 @@ static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} staye static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); -static const u8 sText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); +static const u8 sText_PlayerPickedUpMoney[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!"); @@ -340,9 +340,9 @@ static const u8 sText_ButItFailed[] = _("But it failed!"); static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!"); static const u8 sText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!"); static const u8 sText_StartedToRain[] = _("It started to rain!"); -static const u8 sText_DownpourStarted[] = _("A downpour started!"); +static const u8 sText_DownpourStarted[] = _("A downpour started!"); // corresponds to DownpourText in pokegold and pokecrystal and is used by Rain Dance in GSC static const u8 sText_RainContinues[] = _("Rain continues to fall."); -static const u8 sText_DownpourContinues[] = _("The downpour continues."); +static const u8 sText_DownpourContinues[] = _("The downpour continues."); // unused static const u8 sText_RainStopped[] = _("The rain stopped."); static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!"); static const u8 sText_SandstormRages[] = _("The sandstorm rages."); @@ -632,7 +632,7 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNSTORINGENERGY - 12] = sText_PkmnStoringEnergy, [STRINGID_PKMNUNLEASHEDENERGY - 12] = sText_PkmnUnleashedEnergy, [STRINGID_PKMNFATIGUECONFUSION - 12] = sText_PkmnFatigueConfusion, - [STRINGID_PKMNPICKEDUPITEM - 12] = sText_PkmnPickedUpItem, + [STRINGID_PLAYERPICKEDUPMONEY - 12] = sText_PlayerPickedUpMoney, [STRINGID_PKMNUNAFFECTED - 12] = sText_PkmnUnaffected, [STRINGID_PKMNTRANSFORMEDINTO - 12] = sText_PkmnTransformedInto, [STRINGID_PKMNMADESUBSTITUTE - 12] = sText_PkmnMadeSubstitute, @@ -2288,8 +2288,7 @@ static const u8* TryGetStatusString(u8 *src) statusPtr = status; for (i = 0; i < 8; i++) { - if (*src == EOS) - break; + if (*src == EOS) break; // one line required to match -g *statusPtr = *src; src++; statusPtr++; @@ -2995,7 +2994,7 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId) printerTemplate.currentY = printerTemplate.y; printerTemplate.letterSpacing = textInfo[windowId].letterSpacing; printerTemplate.lineSpacing = textInfo[windowId].lineSpacing; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = textInfo[windowId].fgColor; printerTemplate.bgColor = textInfo[windowId].bgColor; printerTemplate.shadowColor = textInfo[windowId].shadowColor; diff --git a/src/battle_pike.c b/src/battle_pike.c index 6b31419a5c..a161b88b81 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -21,7 +21,6 @@ #include "constants/layouts.h" #include "constants/rgb.h" #include "constants/trainers.h" -#include "constants/species.h" #include "constants/moves.h" #include "constants/party_menu.h" #include "constants/battle_pike.h" diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 9e881d3a3f..ac6d95338a 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -35,7 +35,6 @@ #include "constants/layouts.h" #include "constants/maps.h" #include "constants/moves.h" -#include "constants/species.h" #include "constants/trainers.h" extern const struct MapLayout *const gMapLayouts[]; @@ -523,19 +522,6 @@ static const u8 sTrainerTextGroups[50][2] = {FACILITY_CLASS_HIKER, 4}, }; -enum -{ - HINT_EXIT_DIRECTION, - HINT_REMAINING_ITEMS, - HINT_REMAINING_TRAINERS, - HINT_EXIT_SHORT_REMAINING_TRAINERS, - HINT_EXIT_SHORT_REMAINING_ITEMS, - HINT_EXIT_MEDIUM_REMAINING_TRAINERS, - HINT_EXIT_MEDIUM_REMAINING_ITEMS, - HINT_EXIT_FAR_REMAINING_TRAINERS, - HINT_EXIT_FAR_REMAINING_ITEMS, -}; - static const u8 *const sExitDirectionHintTexts1[] = { BattlePyramid_Text_ExitHintUp1, @@ -1771,7 +1757,9 @@ static bool8 SetPyramidObjectPositionsInAndNearSquare(u8 objType, u8 squareId) r7 &= 1; } - // free(floorLayoutOffsets); BUG: floorLayoutOffsets memory not freed + #ifdef BUGFIX + free(floorLayoutOffsets); + #endif return (numObjects / 2) > numPlacedObjects; } @@ -1823,7 +1811,9 @@ static bool8 SetPyramidObjectPositionsNearSquare(u8 objType, u8 squareId) if (r8 == 4) break; } - // free(floorLayoutOffsets); BUG: floorLayoutOffsets memory not freed + #ifdef BUGFIX + free(floorLayoutOffsets); + #endif return (numObjects / 2) > numPlacedObjects; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fca2b38796..6ec9d16b17 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16,7 +16,6 @@ #include "random.h" #include "battle_controllers.h" #include "battle_interface.h" -#include "constants/species.h" #include "constants/songs.h" #include "constants/trainers.h" #include "constants/battle_anim.h" @@ -954,7 +953,7 @@ static void Cmd_attackcanceler(void) gHitMarker |= HITMARKER_OBEYS; - if (gProtectStructs[gBattlerTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED) + if (gProtectStructs[gBattlerTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED) { PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT); gProtectStructs[gBattlerTarget].bounceMove = 0; @@ -3519,7 +3518,7 @@ static void Cmd_unknown_24(void) if (HP_count == 0) gBattleOutcome |= B_OUTCOME_LOST; - + HP_count = 0; for (i = 0; i < PARTY_SIZE; i++) @@ -3536,14 +3535,17 @@ static void Cmd_unknown_24(void) if (gBattleOutcome == 0 && (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) { - s32 foundPlayer = 0, foundOpponent; + s32 foundPlayer = 0; + s32 foundOpponent; + for (i = 0; i < gBattlersCount; i += 2) { if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) foundPlayer++; } - + foundOpponent = 0; + for (i = 1; i < gBattlersCount; i += 2) { if ((gHitMarker & HITMARKER_FAINTED2(i)) && (!gSpecialStatuses[i].flag40)) @@ -3553,14 +3555,14 @@ static void Cmd_unknown_24(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (foundOpponent + foundPlayer > 1) - gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } else { if (foundOpponent != 0 && foundPlayer != 0) - gBattlescriptCurrInstr = (u8*) T2_READ_32(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; } @@ -4661,24 +4663,19 @@ static void Cmd_jumpifcantswitch(void) || (gStatuses3[gActiveBattler] & STATUS3_ROOTED))) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); - return; } - - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) + else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { - #ifndef NONMATCHING - asm("":::"r5"); - #endif // NONMATCHING if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) party = gEnemyParty; else party = gPlayerParty; - i = 0; + lastMonId = 0; if (gActiveBattler & 2) - i = 3; + lastMonId = 3; - for (lastMonId = i + 3; i < lastMonId; i++) + for (i = lastMonId; i < lastMonId + 3; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) @@ -4687,7 +4684,7 @@ static void Cmd_jumpifcantswitch(void) break; } - if (i == lastMonId) + if (i == lastMonId + 3) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; @@ -4700,18 +4697,18 @@ static void Cmd_jumpifcantswitch(void) { party = gPlayerParty; - i = 0; + lastMonId = 0; if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) - i = 3; + lastMonId = 3; } else { party = gEnemyParty; if (gActiveBattler == 1) - i = 0; + lastMonId = 0; else - i = 3; + lastMonId = 3; } } else @@ -4721,12 +4718,12 @@ static void Cmd_jumpifcantswitch(void) else party = gPlayerParty; - i = 0; + lastMonId = 0; if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(gActiveBattler)) == TRUE) - i = 3; + lastMonId = 3; } - for (lastMonId = i + 3; i < lastMonId; i++) + for (i = lastMonId; i < lastMonId + 3; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) @@ -4735,7 +4732,7 @@ static void Cmd_jumpifcantswitch(void) break; } - if (i == lastMonId) + if (i == lastMonId + 3) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; @@ -4744,11 +4741,11 @@ static void Cmd_jumpifcantswitch(void) { party = gEnemyParty; - i = 0; + lastMonId = 0; if (gActiveBattler == B_POSITION_OPPONENT_RIGHT) - i = 3; + lastMonId = 3; - for (lastMonId = i + 3; i < lastMonId; i++) + for (i = lastMonId; i < lastMonId + 3; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) @@ -4757,7 +4754,7 @@ static void Cmd_jumpifcantswitch(void) break; } - if (i == lastMonId) + if (i == lastMonId + 3) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); else gBattlescriptCurrInstr += 6; @@ -5035,14 +5032,9 @@ static void Cmd_openpartyscreen(void) hitmarkerFaintBits = gHitMarker >> 0x1C; gBattlerFainted = 0; - while (1) - { - if (gBitTable[gBattlerFainted] & hitmarkerFaintBits) - break; - if (gBattlerFainted >= gBattlersCount) - break; + while (!(gBitTable[gBattlerFainted] & hitmarkerFaintBits) + && gBattlerFainted < gBattlersCount) gBattlerFainted++; - } if (gBattlerFainted == gBattlersCount) gBattlescriptCurrInstr = jumpPtr; @@ -5537,8 +5529,8 @@ static void Cmd_hitanimation(void) static u32 GetTrainerMoneyToGive(u16 trainerId) { u32 i = 0; + u32 lastMonLevel = 0; u32 moneyReward; - u8 lastMonLevel = 0; if (trainerId == TRAINER_SECRET_BASE) { @@ -6038,7 +6030,7 @@ static void PutLevelAndGenderOnLvlUpBox(void) printerTemplate.currentY = 0; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = TEXT_COLOR_WHITE; printerTemplate.bgColor = TEXT_COLOR_TRANSPARENT; printerTemplate.shadowColor = TEXT_COLOR_DARK_GREY; @@ -7129,6 +7121,7 @@ static void Cmd_forcerandomswitch(void) s32 i; s32 battler1PartyId = 0; s32 battler2PartyId = 0; + s32 firstMonId; s32 lastMonId = 0; // + 1 s32 monsCount; @@ -7250,10 +7243,11 @@ static void Cmd_forcerandomswitch(void) { i = Random() % monsCount; i += firstMonId; - } while (i == battler2PartyId || i == battler1PartyId); + } + while (i == battler2PartyId || i == battler1PartyId); } while (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE - || GetMonData(&party[i], MON_DATA_HP) == 0); // Should be one while loop, conjoined by an ||, but that doesn't match. Equivalent logic though + || GetMonData(&party[i], MON_DATA_HP) == 0); //should be one while loop, but that doesn't match. } *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; diff --git a/src/battle_setup.c b/src/battle_setup.c index 3c20d9ffe5..0a5e7e8b44 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -44,7 +44,6 @@ #include "constants/songs.h" #include "constants/map_types.h" #include "constants/maps.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/trainer_hill.h" @@ -608,7 +607,7 @@ static void CB2_EndWildBattle(void) else { SetMainCallback2(CB2_ReturnToField); - gFieldCallback = sub_80AF6F0; + gFieldCallback = FieldCB_ReturnToFieldNoScriptCheckMusic; } } @@ -1565,8 +1564,7 @@ static s32 TrainerIdToRematchTableId(const struct RematchTrainer *table, u16 tra { for (j = 0; j < REMATCHES_COUNT; j++) { - if (table[i].trainerIds[j] == 0) - break; + if (table[i].trainerIds[j] == 0) break; // one line required to match -g if (table[i].trainerIds[j] == trainerId) return i; } diff --git a/src/battle_tent.c b/src/battle_tent.c index 0a03fc1675..26b2e8bb11 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -17,7 +17,6 @@ #include "constants/items.h" #include "constants/layouts.h" #include "constants/region_map_sections.h" -#include "constants/species.h" #include "constants/trainers.h" // This file's functions. @@ -355,11 +354,7 @@ static void GenerateOpponentMons(void) { u16 trainerId; s32 i, j, k; - #ifndef NONMATCHING - register const u16 *monSet asm("r9"); // Fix me. Compiler insists on moving that variable into stack. - #else - const u16 *monSet; - #endif + const u16 *monSet; u16 species[FRONTIER_PARTY_SIZE]; u16 heldItems[FRONTIER_PARTY_SIZE]; s32 monId = 0; @@ -380,7 +375,8 @@ static void GenerateOpponentMons(void) } while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum); gTrainerBattleOpponent_A = trainerId; - while (gFacilityTrainers[gTrainerBattleOpponent_A].monSet[monId] != 0xFFFF) + monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet; + while (monSet[monId] != 0xFFFF) monId++; if (monId > 8) break; @@ -421,7 +417,7 @@ static void GenerateOpponentMons(void) species[i] = gFacilityTrainerMons[sRandMonSetId].species; heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonSetId].itemTableId]; - gUnknown_03006298[i] = sRandMonSetId; + gFrontierTempParty[i] = sRandMonSetId; i++; } } diff --git a/src/battle_tower.c b/src/battle_tower.c index e0ff3fe26a..218c3ef70e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -35,7 +35,6 @@ #include "constants/trainers.h" #include "constants/event_objects.h" #include "constants/moves.h" -#include "constants/species.h" #include "constants/easy_chat.h" #include "constants/tv.h" @@ -47,7 +46,7 @@ EWRAM_DATA const struct BattleFrontierTrainer *gFacilityTrainers = NULL; EWRAM_DATA const struct FacilityMon *gFacilityTrainerMons = NULL; // IWRAM common -u16 gUnknown_03006298[MAX_FRONTIER_PARTY_SIZE]; +u16 gFrontierTempParty[MAX_FRONTIER_PARTY_SIZE]; // This file's functions. static void InitTowerChallenge(void); @@ -58,12 +57,12 @@ static void SetTowerBattleWon(void); static void AwardBattleTowerRibbons(void); static void SaveTowerChallenge(void); static void GetOpponentIntroSpeech(void); -static void nullsub_61(void); -static void nullsub_116(void); +static void BattleTowerNop1(void); +static void BattleTowerNop2(void); static void LoadMultiPartnerCandidatesData(void); static void ShowPartnerCandidateMessage(void); static void LoadLinkMultiOpponentsData(void); -static void sub_8164DCC(void); +static void TowerTryCloseLink(void); static void SetMultiPartnerGfx(void); static void SetTowerInterviewData(void); static void ValidateBattleTowerRecordChecksums(void); @@ -776,7 +775,7 @@ struct { { .species = SPECIES_METANG, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .level = 42, .nature = NATURE_BRAVE, .evs = {0, 252, 252, 0, 6, 0}, @@ -784,7 +783,7 @@ struct }, { .species = SPECIES_SKARMORY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .level = 43, .nature = NATURE_IMPISH, .evs = {252, 0, 0, 0, 6, 252}, @@ -792,7 +791,7 @@ struct }, { .species = SPECIES_AGGRON, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .level = 44, .nature = NATURE_ADAMANT, .evs = {0, 252, 0, 0, 252, 6}, @@ -812,12 +811,12 @@ static void (* const sBattleTowerFuncs[])(void) = [BATTLE_TOWER_FUNC_GIVE_RIBBONS] = AwardBattleTowerRibbons, [BATTLE_TOWER_FUNC_SAVE] = SaveTowerChallenge, [BATTLE_TOWER_FUNC_GET_OPPONENT_INTRO] = GetOpponentIntroSpeech, - [BATTLE_TOWER_FUNC_NOP] = nullsub_61, - [BATTLE_TOWER_FUNC_NOP2] = nullsub_116, + [BATTLE_TOWER_FUNC_NOP] = BattleTowerNop1, + [BATTLE_TOWER_FUNC_NOP2] = BattleTowerNop2, [BATTLE_TOWER_FUNC_LOAD_PARTNERS] = LoadMultiPartnerCandidatesData, [BATTLE_TOWER_FUNC_PARTNER_MSG] = ShowPartnerCandidateMessage, [BATTLE_TOWER_FUNC_LOAD_LINK_OPPONENTS] = LoadLinkMultiOpponentsData, - [BATTLE_TOWER_FUNC_13] = sub_8164DCC, + [BATTLE_TOWER_FUNC_TRY_CLOSE_LINK] = TowerTryCloseLink, [BATTLE_TOWER_FUNC_SET_PARTNER_GFX] = SetMultiPartnerGfx, [BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA] = SetTowerInterviewData, }; @@ -1000,7 +999,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void) return FALSE; winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode); - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); u32 recordHasData = 0; @@ -1011,7 +1010,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void) checksum += record[j]; } validMons = 0; - for (j = 0; j < 4; j++) + for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++) { if (gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species != 0 && gSaveBlock2Ptr->frontier.towerRecords[i].party[j].level <= GetFrontierEnemyMonLevel(lvlMode)) @@ -1325,7 +1324,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) struct EmeraldBattleTowerRecord *newRecord = newRecordEm; // Needed to match. // Find a record slot of the same player and replace it. - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { k = 0; for (j = 0; j < TRAINER_ID_LENGTH; j++) @@ -1337,10 +1336,15 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) { for (k = 0; k < PLAYER_NAME_LENGTH; k++) { - // BUG: Wrong variable used, 'j' instead of 'k'. + #ifdef BUGFIX + if (gSaveBlock2Ptr->frontier.towerRecords[i].name[k] != newRecord->name[k]) + break; + if (newRecord->name[k] == EOS) + #else if (gSaveBlock2Ptr->frontier.towerRecords[i].name[j] != newRecord->name[j]) break; if (newRecord->name[j] == EOS) + #endif { k = PLAYER_NAME_LENGTH; break; @@ -1351,19 +1355,19 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) if (k == PLAYER_NAME_LENGTH) break; } - if (i < 5) + if (i < BATTLE_TOWER_RECORD_COUNT) { gSaveBlock2Ptr->frontier.towerRecords[i] = *newRecord; return; } // Find an empty record slot. - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { if (gSaveBlock2Ptr->frontier.towerRecords[i].winStreak == 0) break; } - if (i < 5) + if (i < BATTLE_TOWER_RECORD_COUNT) { gSaveBlock2Ptr->frontier.towerRecords[i] = *newRecord; return; @@ -1374,7 +1378,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm) slotIds[0] = 0; slotsCount++; - for (i = 1; i < 5; i++) + for (i = 1; i < BATTLE_TOWER_RECORD_COUNT; i++) { for (j = 0; j < slotsCount; j++) { @@ -1447,7 +1451,7 @@ u8 GetFrontierOpponentClass(u16 trainerId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - return GetFrontierBrainTrainerClass(); // This sticks out like a sore thumb, but this is the only other way that matches. Maybe it SHOULD be assigned to ret, or all early returns. I don't know. + return GetFrontierBrainTrainerClass(); } else if (trainerId == TRAINER_STEVEN_PARTNER) { @@ -1543,7 +1547,7 @@ void GetFrontierTrainerName(u8 *dst, u16 trainerId) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { - sub_8186468(dst); + GetRecordedBattleRecordMixFriendName(dst); return; } else @@ -1850,14 +1854,14 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) } else { - fixedIV = 31; + fixedIV = MAX_PER_STAT_IVS; } level = SetFacilityPtrsGetLevel(); otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - u16 monId = gUnknown_03006298[i]; + u16 monId = gFrontierTempParty[i]; CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monId].species, level, @@ -1885,7 +1889,7 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId) for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { - u16 monId = gUnknown_03006298[i]; + u16 monId = gFrontierTempParty[i]; CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monId].species, level, @@ -2055,7 +2059,7 @@ void DoSpecialTrainerBattle(void) if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE); CreateTask(Task_StartBattleAfterTransition, 1); - sub_806E694(0); + CreateTask_PlayMapChosenOrBattleBGM(0); BattleTransition_StartOnField(GetSpecialBattleTransition(3)); break; case SPECIAL_BATTLE_PALACE: @@ -2135,7 +2139,7 @@ static void SaveCurrentWinStreak(void) gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = winStreak; } -static void sub_8163EE4(void) +static void SaveBattleTowerRecord(void) { s32 i; u8 lvlMode, battleMode, class; @@ -2174,7 +2178,7 @@ static void sub_8163EE4(void) for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0) - sub_80686FC(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]); + ConvertPokemonToBattleTowerPokemon(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]); } playerRecord->language = gGameLanguage; @@ -2189,7 +2193,7 @@ static void SaveTowerChallenge(void) s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7); if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0)) - sub_8163EE4(); + SaveBattleTowerRecord(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); @@ -2197,12 +2201,12 @@ static void SaveTowerChallenge(void) SaveGameFrontier(); } -static void nullsub_61(void) +static void BattleTowerNop1(void) { } -static void nullsub_116(void) +static void BattleTowerNop2(void) { } @@ -2225,11 +2229,11 @@ static void GetApprenticeMultiPartnerParty(u16 trainerId) } } - gUnknown_03006298[0] = validSpecies[Random() % count]; + gFrontierTempParty[0] = validSpecies[Random() % count]; do { - gUnknown_03006298[1] = validSpecies[Random() % count]; - } while (gUnknown_03006298[0] == gUnknown_03006298[1]); + gFrontierTempParty[1] = validSpecies[Random() % count]; + } while (gFrontierTempParty[0] == gFrontierTempParty[1]); } static void GetRecordMixFriendMultiPartnerParty(u16 trainerId) @@ -2241,7 +2245,7 @@ static void GetRecordMixFriendMultiPartnerParty(u16 trainerId) u16 species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL); count = 0; - for (i = 0; i < 4; i++) + for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++) { if (gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != species1 && gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[i].species != species2 @@ -2253,11 +2257,11 @@ static void GetRecordMixFriendMultiPartnerParty(u16 trainerId) } } - gUnknown_03006298[2] = validSpecies[Random() % count]; + gFrontierTempParty[2] = validSpecies[Random() % count]; do { - gUnknown_03006298[3] = validSpecies[Random() % count]; - } while (gUnknown_03006298[2] == gUnknown_03006298[3]); + gFrontierTempParty[3] = validSpecies[Random() % count]; + } while (gFrontierTempParty[2] == gFrontierTempParty[3]); } static void LoadMultiPartnerCandidatesData(void) @@ -2363,7 +2367,7 @@ static void LoadMultiPartnerCandidatesData(void) } r10 = 0; - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { u32 *record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); u32 recordHasData = 0; @@ -2380,7 +2384,7 @@ static void LoadMultiPartnerCandidatesData(void) && gSaveBlock2Ptr->frontier.towerRecords[i].checksum == checksum) { k = 0; - for (j = 0; j < 4; j++) + for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++) { if (species1 != gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species && species2 != gSaveBlock2Ptr->frontier.towerRecords[i].party[j].species @@ -2406,7 +2410,7 @@ static void LoadMultiPartnerCandidatesData(void) } } -static void sub_81646BC(u16 trainerId, u16 monId) +static void GetPotentialPartnerMoveAndSpecies(u16 trainerId, u16 monId) { u16 move = 0; u16 species = 0; @@ -2421,15 +2425,15 @@ static void sub_81646BC(u16 trainerId, u16 monId) } else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { - move = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gUnknown_03006298[gSpecialVar_0x8005 + 1]].moves[0]; - species = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gUnknown_03006298[gSpecialVar_0x8005 + 1]].species; + move = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gFrontierTempParty[gSpecialVar_0x8005 + 1]].moves[0]; + species = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].party[gFrontierTempParty[gSpecialVar_0x8005 + 1]].species; } else { s32 i; - move = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gUnknown_03006298[gSpecialVar_0x8005 - 1]].moves[0]; - species = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gUnknown_03006298[gSpecialVar_0x8005 - 1]].species; + move = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gFrontierTempParty[gSpecialVar_0x8005 - 1]].moves[0]; + species = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[gFrontierTempParty[gSpecialVar_0x8005 - 1]].species; for (i = 0; i < PLAYER_NAME_LENGTH; i++) gStringVar3[i] = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].playerName[i]; gStringVar3[i] = EOS; @@ -2441,6 +2445,14 @@ static void sub_81646BC(u16 trainerId, u16 monId) StringCopy(gStringVar2, gSpeciesNames[species]); } +// For multi battles in the Battle Tower, the player may choose a partner by talking to them +// These partners can be an NPC or a former/record-mixed Apprentice +// When talked to, their response consists of: +// PARTNER_MSGID_INTRO - A greeting +// PARTNER_MSGID_MON1 - Naming one pokemon on their team, and a move it has +// PARTNER_MSGID_MON2_ASK - Naming a second pokemon on their team, a move it has, and asking if they'd like to be their partner +// PARTNER_MSGID_ACCEPT - If the player agrees to be their partner +// PARTNER_MSGID_REJECT - If the player declines to be their partner static void ShowPartnerCandidateMessage(void) { s32 i, j, partnerId; @@ -2483,11 +2495,11 @@ static void ShowPartnerCandidateMessage(void) break; case PARTNER_MSGID_MON1: monId = gSaveBlock2Ptr->frontier.trainerIds[8 + k * 2]; - sub_81646BC(trainerId, monId); + GetPotentialPartnerMoveAndSpecies(trainerId, monId); break; case PARTNER_MSGID_MON2_ASK: monId = gSaveBlock2Ptr->frontier.trainerIds[9 + k * 2]; - sub_81646BC(trainerId, monId); + GetPotentialPartnerMoveAndSpecies(trainerId, monId); break; case PARTNER_MSGID_ACCEPT: gPartnerTrainerId = trainerId; @@ -2498,13 +2510,13 @@ static void ShowPartnerCandidateMessage(void) } else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { - gSaveBlock2Ptr->frontier.trainerIds[18] = gUnknown_03006298[2]; - gSaveBlock2Ptr->frontier.trainerIds[19] = gUnknown_03006298[3]; + gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[2]; + gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[3]; } else { - gSaveBlock2Ptr->frontier.trainerIds[18] = gUnknown_03006298[0]; - gSaveBlock2Ptr->frontier.trainerIds[19] = gUnknown_03006298[1]; + gSaveBlock2Ptr->frontier.trainerIds[18] = gFrontierTempParty[0]; + gSaveBlock2Ptr->frontier.trainerIds[19] = gFrontierTempParty[1]; } for (k = 0; k < 14; k++) { @@ -2639,7 +2651,7 @@ static void LoadLinkMultiOpponentsData(void) } } -static void sub_8164DCC(void) +static void TowerTryCloseLink(void) { if (gWirelessCommType != 0) SetCloseLinkCallback(); @@ -2683,7 +2695,7 @@ static void ValidateBattleTowerRecordChecksums(void) if (gSaveBlock2Ptr->frontier.towerPlayer.checksum != checksum) ClearBattleTowerRecord(&gSaveBlock2Ptr->frontier.towerPlayer); - for (i = 0; i < 5; i++) + for (i = 0; i < BATTLE_TOWER_RECORD_COUNT; i++) { record = (u32*)(&gSaveBlock2Ptr->frontier.towerRecords[i]); checksum = 0; @@ -2834,7 +2846,7 @@ static void FillEReaderTrainerWithPlayerData(void) } for (i = 0; i < 3; i++) - sub_80686FC(&gPlayerParty[i], &ereaderTrainer->party[i]); + ConvertPokemonToBattleTowerPokemon(&gPlayerParty[i], &ereaderTrainer->party[i]); SetEReaderTrainerChecksum(ereaderTrainer); } @@ -2957,7 +2969,12 @@ static void FillPartnerParty(u16 trainerId) sStevenMons[i].species, sStevenMons[i].level, sStevenMons[i].fixedIV, - TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures. + TRUE, + #ifdef BUGFIX + j, + #else + i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures. + #endif OT_ID_PRESET, STEVEN_OTID); for (j = 0; j < PARTY_SIZE; j++) SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]); @@ -3063,9 +3080,12 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em { dst->lvlMode = src->lvlMode; dst->winStreak = src->winStreak; - // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. - // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) + // UB: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. + #ifdef UBFIX + for (i = 0; i < ARRAY_COUNT(sRubyFacilityClassToEmerald); i++) + #else for (i = 0; i < FACILITY_CLASSES_COUNT; i++) + #endif { if (sRubyFacilityClassToEmerald[i][0] == src->facilityClass) break; @@ -3113,9 +3133,12 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru { dst->lvlMode = src->lvlMode; dst->winStreak = src->winStreak; - // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. - // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) instead + // UB: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries. + #ifdef UBFIX + for (i = 0; i < ARRAY_COUNT(sRubyFacilityClassToEmerald); i++) + #else for (i = 0; i < FACILITY_CLASSES_COUNT; i++) + #endif { if (sRubyFacilityClassToEmerald[i][1] == src->facilityClass) break; @@ -3272,21 +3295,21 @@ static u8 GetFrontierTrainerFixedIvs(u16 trainerId) else if (trainerId <= FRONTIER_TRAINER_TESS) // 200 - 219 fixedIv = 21; else // 220+ (- 299) - fixedIv = 31; + fixedIv = MAX_PER_STAT_IVS; return fixedIv; } -static u16 sub_8165D40(void) +static u16 GetBattleTentTrainerId(void) { u32 facility = VarGet(VAR_FRONTIER_FACILITY); - if (facility == FRONTIER_FACILITY_PALACE) - return Random() % 30; - else if (facility == FRONTIER_FACILITY_ARENA) - return Random() % 30; - else if (facility == FRONTIER_FACILITY_FACTORY) - return Random() % 30; + if (facility == FRONTIER_FACILITY_PALACE) // Verdanturf Tent; uses Palace mechanics + return Random() % NUM_BATTLE_TENT_TRAINERS; + else if (facility == FRONTIER_FACILITY_ARENA) // Fallarbor Tent; uses Arena mechanics + return Random() % NUM_BATTLE_TENT_TRAINERS; + else if (facility == FRONTIER_FACILITY_FACTORY) // Slateport Tent; uses Factory mechanics + return Random() % NUM_BATTLE_TENT_TRAINERS; else if (facility == FRONTIER_FACILITY_TOWER) return 0; else @@ -3333,7 +3356,7 @@ static void SetNextBattleTentOpponent(void) do { - trainerId = sub_8165D40(); + trainerId = GetBattleTentTrainerId(); for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) @@ -3496,7 +3519,7 @@ bool32 ValidateBattleTowerRecord(u8 recordId) // unused } } -void sub_8166188(void) +void TrySetLinkBattleTowerEnemyPartyLevel(void) { if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) { diff --git a/src/battle_transition.c b/src/battle_transition.c index 4a9d263031..74e1548e7d 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -1956,10 +1956,7 @@ static bool8 Phase2_Ripple_Func2(struct Task *task) for (i = 0; i < 160; i++, r4 += r8) { s16 var = r4 >> 8; - - var++; - var--; - gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3); + gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var & 0xffff, r3); } if (++task->tData3 == 81) @@ -3973,7 +3970,7 @@ static bool8 Phase2_FrontierLogoWave_Func4(struct Task *task) for (i = 0; i < 160; i++, var6 += var8) { - const u16 index = var6 >> 8; + s16 index = var6 / 256; gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(index & 0xff, amplitude); } diff --git a/src/battle_tv.c b/src/battle_tv.c index e3dec9a6cf..7e311fdab0 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -6,7 +6,6 @@ #include "constants/battle_string_ids.h" #include "constants/battle_anim.h" #include "constants/moves.h" -#include "constants/species.h" #include "battle_message.h" #include "tv.h" @@ -715,15 +714,16 @@ void BattleTv_SetDataBasedOnAnimation(u8 animationId) void TryPutLinkBattleTvShowOnAir(void) { - u16 playerBestSpecies = 0, opponentBestSpecies = 0, moveId = 0; - s16 sum = 0, playerBestSum = 0, opponentBestSum = SHRT_MAX; + u16 playerBestSpecies = 0, opponentBestSpecies = 0; + s16 playerBestSum = 0, opponentBestSum = SHRT_MAX; u8 playerBestMonId = 0, opponentBestMonId = 0; struct BattleTvMovePoints *movePoints = NULL; u8 countPlayer = 0, countOpponent = 0; - u16 species; + s16 sum = 0; + u16 species = 0; + u16 moveId = 0; s32 i, j; - - int zero = 0, one = 1; // stupid variables needed to match. Feel free to get rid of them. + int zero = 0, one = 1; //needed for matching if (gBattleStruct->anyMonHasTransformed) return; diff --git a/src/battle_util.c b/src/battle_util.c index 31ed0b3fe7..e929de091c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1,19 +1,31 @@ #include "global.h" #include "battle.h" -#include "battle_util.h" #include "battle_anim.h" +#include "battle_arena.h" +#include "battle_pyramid.h" +#include "battle_util.h" #include "pokemon.h" +#include "international_string_util.h" #include "item.h" #include "util.h" #include "battle_scripts.h" #include "random.h" +#include "text.h" +#include "safari_zone.h" +#include "sound.h" +#include "sprite.h" #include "string_util.h" +#include "task.h" +#include "trig.h" +#include "window.h" +#include "battle_message.h" #include "battle_ai_script_commands.h" #include "battle_controllers.h" #include "event_data.h" #include "link.h" #include "field_weather.h" #include "constants/abilities.h" +#include "constants/battle_anim.h" #include "constants/battle_move_effects.h" #include "constants/battle_script_commands.h" #include "constants/battle_string_ids.h" @@ -21,17 +33,16 @@ #include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/songs.h" #include "constants/species.h" #include "constants/weather.h" -#include "battle_arena.h" -#include "battle_pyramid.h" -#include "international_string_util.h" -#include "safari_zone.h" -#include "sound.h" -#include "task.h" -#include "trig.h" -#include "window.h" -#include "constants/songs.h" + +/* +NOTE: The data and functions in this file up until (but not including) sSoundMovesTable +are actually part of battle_main.c. They needed to be moved to this file in order to +match the ROM; this is also why sSoundMovesTable's declaration is in the middle of +functions instead of at the top of the file with the other declarations. +*/ extern const u8 *const gBattleScriptsForMoveEffects[]; extern const u8 *const gBattlescriptsForBallThrow[]; @@ -283,9 +294,7 @@ void HandleAction_UseItem(void) gBattlerAttacker = gBattlerTarget = gBattlerByTurnOrder[gCurrentTurnActionNumber]; gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - ClearFuryCutterDestinyBondGrudge(gBattlerAttacker); - gLastUsedItem = gBattleBufferB[gBattlerAttacker][1] | (gBattleBufferB[gBattlerAttacker][2] << 8); if (gLastUsedItem <= LAST_BALL) // is ball @@ -311,18 +320,18 @@ void HandleAction_UseItem(void) break; case AI_ITEM_CURE_CONDITION: gBattleCommunication[MULTISTRING_CHOOSER] = 0; - if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 1) + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1) { - if (*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 0x3E) + if (*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 0x3E) gBattleCommunication[MULTISTRING_CHOOSER] = 5; } else { - do + while (!(*(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) & 1)) { - *(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) >>= 1; + *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; gBattleCommunication[MULTISTRING_CHOOSER]++; - } while (!(*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) & 1)); + } } break; case AI_ITEM_X_STAT: @@ -338,7 +347,7 @@ void HandleAction_UseItem(void) while (!((*(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1))) & 1)) { - *(gBattleStruct->AI_itemFlags + (gBattlerAttacker >> 1)) >>= 1; + *(gBattleStruct->AI_itemFlags + gBattlerAttacker / 2) >>= 1; gBattleTextBuff1[2]++; } @@ -354,7 +363,7 @@ void HandleAction_UseItem(void) break; } - gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + (gBattlerAttacker >> 1))]; + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[*(gBattleStruct->AI_itemType + gBattlerAttacker / 2)]; } gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -527,9 +536,12 @@ void HandleAction_ThrowPokeblock(void) gBattleStruct->safariPkblThrowCounter++; if (gBattleStruct->safariEscapeFactor > 1) { - // BUG: The safariEscapeFactor is unintetionally able to become 0 (but it can not become negative!). This causes the pokeblock throw glitch. - // To fix that change the < in the if statement below to <=. + // BUG: safariEscapeFactor can become 0 below. This causes the pokeblock throw glitch. + #ifdef BUGFIX + if (gBattleStruct->safariEscapeFactor <= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) + #else if (gBattleStruct->safariEscapeFactor < sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]) + #endif gBattleStruct->safariEscapeFactor = 1; else gBattleStruct->safariEscapeFactor -= sPkblToEscapeFactor[gBattleStruct->safariPkblThrowCounter][gBattleCommunication[MULTISTRING_CHOOSER]]; @@ -3809,7 +3821,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED && (Random() % 100) < atkHoldEffectParam - && gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED + && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED && gBattleMons[gBattlerTarget].hp) { gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_FLINCH; diff --git a/src/berry.c b/src/berry.c index d70e8c3537..98264f37b8 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1331,7 +1331,7 @@ void ResetBerryTreeSparkleFlags(void) s16 bottom; int i; - GetCameraCoords((u16*)&cam_left, (u16*)&cam_top); + GetCameraCoords(&cam_left, &cam_top); left = cam_left; top = cam_top + 3; right = cam_left + 14; diff --git a/src/berry_blender.c b/src/berry_blender.c index 2cdb841ee1..573affbd51 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -168,8 +168,8 @@ struct BerryBlender u16 progressBarValue; u16 maxProgressBarValue; u16 centerScale; - s16 bg_X; - s16 bg_Y; + u16 bg_X; + u16 bg_Y; u8 opponentTaskIds[BLENDER_MAX_PLAYERS - 1]; u8 perfectOpponents; // for debugging, NPCs will always hit Best u16 scores[BLENDER_MAX_PLAYERS][NUM_SCORE_TYPES]; @@ -1852,7 +1852,9 @@ static void Task_HandleOpponent1(u8 taskId) gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; // BUG: Overrwrote above assignment. Opponent 1 can't get Best at low speed + #ifndef BUGFIX gRecvCmds[1][BLENDER_COMM_SCORE] = LINKCMD_BLENDER_SCORE_GOOD; + #endif } else if (sBerryBlender->speed < 1500) { @@ -2131,11 +2133,17 @@ static void UpdateOpponentScores(void) sBerryBlender->scores[i][SCORE_MISS]++; } - // BUG: Should [i][BLENDER_COMM_SCORE] below, not [BLENDER_COMM_SCORE][i] + // BUG: Should be [i][BLENDER_COMM_SCORE] below, not [BLENDER_COMM_SCORE][i] // As a result the music tempo updates if any player misses, but only if 1 specific player hits + #ifdef BUGFIX + if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS + || gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_BEST + || gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_GOOD) + #else if (gRecvCmds[i][BLENDER_COMM_SCORE] == LINKCMD_BLENDER_SCORE_MISS || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_BEST || gRecvCmds[BLENDER_COMM_SCORE][i] == LINKCMD_BLENDER_SCORE_GOOD) + #endif { if (sBerryBlender->speed > 1500) m4aMPlayTempoControl(&gMPlayInfo_BGM, ((sBerryBlender->speed - 750) / 20) + 256); @@ -3387,13 +3395,13 @@ static void RestoreBgCoord(s16* coord) // For "unshaking" the screen after ShakeBgCoordForHit is called static void RestoreBgCoords(void) { - RestoreBgCoord((s16 *)&sBerryBlender->bg_X); - RestoreBgCoord((s16 *)&sBerryBlender->bg_Y); + RestoreBgCoord(&sBerryBlender->bg_X); + RestoreBgCoord(&sBerryBlender->bg_Y); } static void BlenderLandShakeBgCoord(s16* coord, u16 timer) { - u8 strength; + s32 strength; if (timer < 10) strength = 16; diff --git a/src/berry_crush.c b/src/berry_crush.c index 2175d2abbb..90bc7150d2 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -40,22 +40,27 @@ struct BerryCrushGame_Player { - u16 unk0; - u16 unk2; - union - { - u8 as_2d_bytes[2][8]; - u16 as_hwords[8]; - } unk4; - u8 unk14[12]; + u8 unk0[PLAYER_NAME_LENGTH + 1 + 4]; + u16 unkC; + u16 unkE; + u16 unk10; + u16 unk12; + u16 unk14; + u16 unk16; + u16 unk18; + u16 unk1A; + u8 unk1B; + u8 unk1C; }; -struct __attribute__((packed, aligned(2))) BerryCrushGame_4E +struct BerryCrushGame_4E { u16 unk0; - u16 filler2; + u16 unk2; u8 unk4_0:1; u8 unk4_1:1; + u8 unk4_2:1; + u8 unk4_3:5; s8 unk5; u16 unk6; u16 unk8; @@ -63,11 +68,16 @@ struct __attribute__((packed, aligned(2))) BerryCrushGame_4E u16 unkC; }; -struct __attribute__((packed)) BerryCrushGame_40 +struct BerryCrushGame_40 { - u8 unk0[2]; - u16 unk2[6]; - struct BerryCrushGame_4E unkE; + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; + s16 unkE; }; struct BerryCrushGame_5C @@ -77,37 +87,22 @@ struct BerryCrushGame_5C u8 unk02_1:1; u8 unk02_2:1; u8 unk02_3:5; - u8 unk03; + s8 unk03; u16 unk04; u16 unk06; u16 unk08; u16 unk0A; }; -union BerryCrushGame_68 +struct BerryCrushGame_68 { - struct BerryCrushGame_68_x - { - struct BerryCrushGame_68_x_SubStruct - { - s32 unk00; - u16 unk04; - s16 unk06; - u16 unk08; - u16 unk0A; - u16 unk0C[2][5]; - u8 filler20[16]; - } unk00; - u8 unk30[12]; - struct BerryCrushGame_Player others[4]; - u8 fillerBC[20]; - } as_four_players; - struct BerryCrushGame_68_y - { - u8 filler00[28]; - struct BerryCrushGame_Player unk1C[5]; - u8 fillerBC[20]; - } as_five_players; + u32 unk00; + u16 unk04; + u16 unk06; + u16 unk08; + u16 unk0A; + u16 unk0C[2][5]; + u8 unk20[2][8]; }; struct BerryCrushGame_138_C @@ -140,69 +135,57 @@ struct BerryCrushGame_138 u8 filler81; u8 unk82; u8 unk83[5]; + u16 unk88[4][0x800]; }; struct BerryCrushGame { MainCallback unk0; u32 (* unk4)(struct BerryCrushGame *, u8 *); - u8 unk8; u8 unk9; - u8 unkA; + u8 mainTask; u8 unkB; - u8 unkC; u8 unkD; - u8 unkE; u8 unkF; - u16 unk10; u16 unk12; u16 unk14; - u16 unk16; s16 unk18; s16 unk1A; s32 unk1C; s32 unk20; u8 unk24; - u8 unk25_0:1; u8 unk25_1:1; u8 unk25_2:1; u8 unk25_3:1; u8 unk25_4:1; u8 unk25_5:3; - u16 unk26; - u16 unk28; s16 unk2A; s16 unk2C; - s16 unk2E; s16 unk30; s16 unk32; s16 unk34; - - u8 unk36[0xA]; - - struct BerryCrushGame_40 unk40; + u8 unk36[0xC]; + u16 unk42[6]; + u16 unk4E[7]; struct BerryCrushGame_5C unk5C; - union BerryCrushGame_68 unk68; + struct BerryCrushGame_68 unk68; + struct BerryCrushGame_Player unk98[5]; struct BerryCrushGame_138 unk138; - u8 unk1C0[0x1000]; - u8 unk11C0[0x1000]; - u8 unk21C0[0x1000]; - u8 unk31C0[0x1000]; }; -static void sub_8020F74(void); -static void sub_8020F88(void); -static void sub_8020FA0(u8); -void sub_8020FC4(struct BerryCrushGame *); +static void VBlankCB(void); +static void MainCB(void); +static void MainTask(u8); +static void ParseName_Options(struct BerryCrushGame *); void sub_8022BEC(u16, u8, u8 *); static void BerryCrush_SetPaletteFadeParams(u8 *, bool8, u32, s8, u8, u8, u16); static int sub_8021450(struct BerryCrushGame *); @@ -215,7 +198,7 @@ void sub_8022524(struct BerryCrushGame_138 *, u16); void sub_8022B28(struct Sprite *); void sub_8022554(struct BerryCrushGame_138 *r0); void sub_8024578(struct BerryCrushGame *); -void sub_8024644(u8 *, u8, u8, u16, u8); +void sub_8024644(u8 *, u32, u32, u32, u32); static void sub_8022A20(struct Sprite *sprite); static u32 BerryCrushCommand_BeginNormalPaletteFade(struct BerryCrushGame *r6, u8 *r1); static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5); @@ -243,7 +226,7 @@ static u32 sub_8024444(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1 static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1); static u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1); -static EWRAM_DATA struct BerryCrushGame *gUnknown_02022C90 = NULL; +static EWRAM_DATA struct BerryCrushGame *gBerryCrushGame = NULL; static const u8 gUnknown_082F325C[] = { 1, 2, 4, 8, 16, 32, 64, 128 }; static const u8 gUnknown_082F3264[] = { 0, 1, 2, 3, 5, 0, 0, 0 }; @@ -816,22 +799,21 @@ static const u8 gUnknown_082F4434[][4] = static const u8 gUnknown_082F4444[] = {5, 7, 9, 12}; static const u8 gUnknown_082F4448[] = {3, 7, 15, 31}; - -struct BerryCrushGame *sub_8020C00(void) +struct BerryCrushGame * GetBerryCrushGame(void) { - return gUnknown_02022C90; + return gBerryCrushGame; } -u32 sub_8020C0C(MainCallback callback) +u32 QuitBerryCrush(MainCallback callback) { - if (!gUnknown_02022C90) + if (!gBerryCrushGame) return 2; if (!callback) - callback = gUnknown_02022C90->unk0; + callback = gBerryCrushGame->unk0; - DestroyTask(gUnknown_02022C90->unkA); - FREE_AND_SET_NULL(gUnknown_02022C90); + DestroyTask(gBerryCrushGame->mainTask); + FREE_AND_SET_NULL(gBerryCrushGame); SetMainCallback2(callback); if (callback == CB2_ReturnToField) { @@ -868,8 +850,8 @@ void StartBerryCrush(MainCallback callback) return; } - gUnknown_02022C90 = AllocZeroed(sizeof(*gUnknown_02022C90)); - if (!gUnknown_02022C90) + gBerryCrushGame = AllocZeroed(sizeof(*gBerryCrushGame)); + if (!gBerryCrushGame) { SetMainCallback2(callback); Rfu.unk_10 = 0; @@ -878,110 +860,110 @@ void StartBerryCrush(MainCallback callback) return; } - gUnknown_02022C90->unk0 = callback; - gUnknown_02022C90->unk8 = multiplayerId; - gUnknown_02022C90->unk9 = playerCount; - sub_8020FC4(gUnknown_02022C90); - gUnknown_02022C90->unk12 = 1; - gUnknown_02022C90->unkE = 1; - gUnknown_02022C90->unkF = 6; - BerryCrush_SetPaletteFadeParams(gUnknown_02022C90->unk36, 1, -1, 0, 16, 0, 0); - sub_8022BEC(4, 1, gUnknown_02022C90->unk36); - SetMainCallback2(sub_8020F88); - gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8); + gBerryCrushGame->unk0 = callback; + gBerryCrushGame->unk8 = multiplayerId; + gBerryCrushGame->unk9 = playerCount; + ParseName_Options(gBerryCrushGame); + gBerryCrushGame->unk12 = 1; + gBerryCrushGame->unkE = 1; + gBerryCrushGame->unkF = 6; + BerryCrush_SetPaletteFadeParams(gBerryCrushGame->unk36, 1, -1, 0, 16, 0, 0); + sub_8022BEC(4, 1, gBerryCrushGame->unk36); + SetMainCallback2(MainCB); + gBerryCrushGame->mainTask = CreateTask(MainTask, 8); gTextFlags.autoScroll = 0; } -static void sub_8020D8C(void) +static void GetBerryFromBag(void) { if (gSpecialVar_ItemId < FIRST_BERRY_INDEX || gSpecialVar_ItemId > LAST_BERRY_INDEX + 1) gSpecialVar_ItemId = ITEM_CHERI_BERRY; else RemoveBagItem(gSpecialVar_ItemId, 1); - gUnknown_02022C90->unk68.as_four_players.others[gUnknown_02022C90->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX; - gUnknown_02022C90->unkE = 1; - gUnknown_02022C90->unkF = 9; - BerryCrush_SetPaletteFadeParams(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0); - sub_8022BEC(4, 1, gUnknown_02022C90->unk36); - gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8); - SetMainCallback2(sub_8020F88); + gBerryCrushGame->unk98[gBerryCrushGame->unk8].unkC = gSpecialVar_ItemId - FIRST_BERRY_INDEX; + gBerryCrushGame->unkE = 1; + gBerryCrushGame->unkF = 9; + BerryCrush_SetPaletteFadeParams(gBerryCrushGame->unk36, 0, -1, 0, 16, 0, 0); + sub_8022BEC(4, 1, gBerryCrushGame->unk36); + gBerryCrushGame->mainTask = CreateTask(MainTask, 8); + SetMainCallback2(MainCB); } -void sub_8020E1C(void) +static void BerryCrush_SetupMainTask(void) { - DestroyTask(gUnknown_02022C90->unkA); - ChooseBerryForMachine(sub_8020D8C); + DestroyTask(gBerryCrushGame->mainTask); + ChooseBerryForMachine(GetBerryFromBag); } -static void sub_8020E3C(void) +static void BerryCrush_SetVBlankCB(void) { - SetVBlankCallback(sub_8020F74); + SetVBlankCallback(VBlankCB); } -void sub_8020E4C(void) +static void BerryCrush_InitVBlankCB(void) { SetVBlankCallback(NULL); } -void sub_8020E58(void) +static void BerryCrush_SaveResults(void) { u32 var0, var1; - var0 = gUnknown_02022C90->unk68.as_four_players.unk00.unk04; + var0 = gBerryCrushGame->unk68.unk04; var0 = Q_24_8(var0); var0 = MathUtil_Div32(var0, Q_24_8(60)); - var1 = gUnknown_02022C90->unk68.as_four_players.unk00.unk0A; + var1 = gBerryCrushGame->unk68.unk0A; var1 = Q_24_8(var1); var1 = MathUtil_Div32(var1, var0) & 0xFFFF; - gUnknown_02022C90->unk16 = var1; - switch (gUnknown_02022C90->unk9) + gBerryCrushGame->unk16 = var1; + switch (gBerryCrushGame->unk9) { case 2: - if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[0]) + if (gBerryCrushGame->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[0]) { - gUnknown_02022C90->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = gUnknown_02022C90->unk16; + gBerryCrushGame->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = gBerryCrushGame->unk16; } break; case 3: - if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[1]) + if (gBerryCrushGame->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[1]) { - gUnknown_02022C90->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = gUnknown_02022C90->unk16; + gBerryCrushGame->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = gBerryCrushGame->unk16; } break; case 4: - if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[2]) + if (gBerryCrushGame->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[2]) { - gUnknown_02022C90->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = gUnknown_02022C90->unk16; + gBerryCrushGame->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = gBerryCrushGame->unk16; } break; case 5: - if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[3]) + if (gBerryCrushGame->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[3]) { - gUnknown_02022C90->unk25_1 = 1; - gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = gUnknown_02022C90->unk16; + gBerryCrushGame->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = gBerryCrushGame->unk16; } break; } - gUnknown_02022C90->unk1C = gUnknown_02022C90->unk68.as_four_players.unk00.unk00; - if (GiveBerryPowder(gUnknown_02022C90->unk1C)) + gBerryCrushGame->unk1C = gBerryCrushGame->unk68.unk00; + if (GiveBerryPowder(gBerryCrushGame->unk1C)) return; - gUnknown_02022C90->unk25_0 = 1; + gBerryCrushGame->unk25_0 = 1; } -static void sub_8020F74(void) +static void VBlankCB(void) { TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); } -static void sub_8020F88(void) +static void MainCB(void) { RunTasks(); RunTextPrinters(); @@ -989,30 +971,24 @@ static void sub_8020F88(void) BuildOamBuffer(); } -static void sub_8020FA0(u8 taskId) +static void MainTask(u8 taskId) { - if (gUnknown_02022C90->unk4) - gUnknown_02022C90->unk4(gUnknown_02022C90, gUnknown_02022C90->unk36); + if (gBerryCrushGame->unk4) + gBerryCrushGame->unk4(gBerryCrushGame, gBerryCrushGame->unk36); - sub_8021450(gUnknown_02022C90); + sub_8021450(gBerryCrushGame); } -#define PLAYER_UNK14(game, i) \ - ((u8 *)(game) \ - + offsetof(struct BerryCrushGame, unk68) \ - + offsetof(struct BerryCrushGame_68_x, unk30) \ - + sizeof(struct BerryCrushGame_Player) * (i)) - -void sub_8020FC4(struct BerryCrushGame *arg0) +static void ParseName_Options(struct BerryCrushGame *arg0) { - u8 i; + u8 i = 0; - for (i = 0; i < arg0->unk9; i++) - StringCopy(PLAYER_UNK14(arg0, i), gLinkPlayers[i].name); + for (; i < arg0->unk9; i++) + StringCopy(arg0->unk98[i].unk0, gLinkPlayers[i].name); for (; i < 5; i++) { - memset(PLAYER_UNK14(arg0, i), 1, PLAYER_NAME_LENGTH); - arg0->unk68.as_five_players.unk1C[i].unk14[PLAYER_NAME_LENGTH] = EOS; + memset(arg0->unk98[i].unk0, 1, PLAYER_NAME_LENGTH); + arg0->unk98[i].unk0[PLAYER_NAME_LENGTH] = EOS; } switch (gSaveBlock2Ptr->optionsTextSpeed) @@ -1029,13 +1005,14 @@ void sub_8020FC4(struct BerryCrushGame *arg0) } } -int sub_802104C(void) +// TODO: Everything from here on is likely in separate files. +s32 InitBerryCrushDisplay(void) { - struct BerryCrushGame *var0 = sub_8020C00(); - if (!var0) + struct BerryCrushGame *game = GetBerryCrushGame(); + if (!game) return -1; - switch (var0->unkC) + switch (game->unkC) { case 0: SetVBlankCallback(NULL); @@ -1057,9 +1034,9 @@ int sub_802104C(void) case 3: ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_082F32C8, ARRAY_COUNT(gUnknown_082F32C8)); - SetBgTilemapBuffer(1, var0->unk1C0); - SetBgTilemapBuffer(2, var0->unk21C0); - SetBgTilemapBuffer(3, var0->unk31C0); + SetBgTilemapBuffer(1, game->unk138.unk88[0]); + SetBgTilemapBuffer(2, game->unk138.unk88[2]); + SetBgTilemapBuffer(3, game->unk138.unk88[3]); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(2, 0, 0); @@ -1088,8 +1065,8 @@ int sub_802104C(void) InitStandardTextBoxWindows(); InitTextBoxGfxAndPrinters(); - sub_8022588(var0); - sub_8022600(var0); + sub_8022588(game); + sub_8022600(game); gPaletteFade.bufferTransferDisabled = TRUE; break; case 7: @@ -1097,7 +1074,7 @@ int sub_802104C(void) CopyToBgTilemapBuffer(1, gBerryCrushGrinderTopTilemap, 0, 0); CopyToBgTilemapBuffer(2, gBerryCrushContainerCapTilemap, 0, 0); CopyToBgTilemapBuffer(3, gBerryCrushBackgroundTilemap, 0, 0); - sub_80226D0(var0); + sub_80226D0(game); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); @@ -1105,7 +1082,7 @@ int sub_802104C(void) case 8: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - sub_8022730(var0); + sub_8022730(game); SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY); ChangeBgX(1, 0, 0); ChangeBgY(1, 0, 0); @@ -1118,18 +1095,18 @@ int sub_802104C(void) ShowBg(2); ShowBg(3); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); - sub_8020E3C(); - var0->unkC = 0; + BerryCrush_SetVBlankCB(); + game->unkC = 0; return 1; } - var0->unkC++; + game->unkC++; return 0; } int sub_802130C(void) { - struct BerryCrushGame *var0 = sub_8020C00(); + struct BerryCrushGame *var0 = GetBerryCrushGame(); if (!var0) return -1; @@ -1223,7 +1200,7 @@ void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) &gUnknown_082F436C, gUnknown_082F41E8[i], gUnknown_082F41E8[i], - arg0->unk68.as_four_players.others[i].unk0 + 133); + arg0->unk98[i].unkC + 133); arg1->unk38[i] = &gSprites[spriteId]; arg1->unk38[i]->oam.priority = 3; arg1->unk38[i]->affineAnimPaused = TRUE; @@ -1300,7 +1277,7 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) u16 var, var2; sp4 = 0; - var4E = &arg0->unk40.unkE; + var4E = (struct BerryCrushGame_4E *)arg0->unk4E; for (i = 0; i < arg0->unk9; i++) { var = var4E->unkA >> (i * 3); @@ -1419,7 +1396,7 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) u8 r2; s32 r3; u8 r7; - union BerryCrushGame_68 * sp24 = &sp0C->unk68; + struct BerryCrushGame_68 * sp24 = &sp0C->unk68; u32 xOffset; s32 r6; @@ -1438,44 +1415,44 @@ void sub_8021A28(struct BerryCrushGame * sp0C, u8 sp10, u8 sp14, u8 sp18) switch (sp10) { case 0: - sp1C = sp24->as_five_players.unk1C[0].unk4.as_2d_bytes[sp10][r8]; - if (r8 != 0 && sp24->as_four_players.unk00.unk0C[sp10][r8] != sp24->as_four_players.unk00.unk0C[sp10][r8 - 1]) + sp1C = sp24->unk20[sp10][r8]; + if (r8 != 0 && sp24->unk0C[sp10][r8] != sp24->unk0C[sp10][r8 - 1]) sp20 = r8; - ConvertIntToDecimalStringN(gStringVar4, sp24->as_four_players.unk00.unk0C[sp10][r8], STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar4, sp24->unk0C[sp10][r8], STR_CONV_MODE_RIGHT_ALIGN, 4); StringAppend(gStringVar4, gUnknown_082F43B4[sp10]); break; case 1: - sp1C = sp24->as_five_players.unk1C[0].unk4.as_2d_bytes[sp10][r8]; - if (r8 != 0 && sp24->as_four_players.unk00.unk0C[sp10][r8] != sp24->as_four_players.unk00.unk0C[sp10][r8 - 1]) + sp1C = sp24->unk20[sp10][r8]; + if (r8 != 0 && sp24->unk0C[sp10][r8] != sp24->unk0C[sp10][r8 - 1]) sp20 = r8; - ConvertIntToDecimalStringN(gStringVar1, sp24->as_four_players.unk00.unk0C[sp10][r8] >> 4, STR_CONV_MODE_RIGHT_ALIGN, 3); - r3 = 0; - r7 = sp24->as_four_players.unk00.unk0C[sp10][r8] & 15; + ConvertIntToDecimalStringN(gStringVar1, sp24->unk0C[sp10][r8] >> 4, STR_CONV_MODE_RIGHT_ALIGN, 3); + xOffset = 0; + r7 = sp24->unk0C[sp10][r8] & 15; for (r2 = 0; r2 < 4; ++r2) if ((r7 >> (3 - r2)) & 1) - r3 += sPressingSpeedConversionTable[r2]; - r7 = r3 / 1000000u; + xOffset += sPressingSpeedConversionTable[r2]; + r7 = xOffset / 1000000u; ConvertIntToDecimalStringN(gStringVar2, r7, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[sp10]); break; case 2: sp1C = r8; sp20 = r8; - r2 = sp0C->unk68.as_five_players.unk1C[r8].unk14[12]; + r2 = sp0C->unk98[r8].unkC; if (r2 >= LAST_BERRY_INDEX - FIRST_BERRY_INDEX + 2) r2 = 0; StringCopy(gStringVar1, gBerries[r2].name); - StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[2]); + StringExpandPlaceholders(gStringVar4, gUnknown_082F43B4[sp10]); break; } - xOffset = GetStringRightAlignXOffset(2, gStringVar4, sp14 - 4); - AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, xOffset, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); + r3 = GetStringRightAlignXOffset(2, gStringVar4, sp14 - 4); + AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, r3, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); if (sp1C == sp0C->unk8) StringCopy(gStringVar3, gText_1DotBlueF700); else StringCopy(gStringVar3, gText_1DotF700); gStringVar3[0] = sp20 + CHAR_1; - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, PLAYER_UNK14(sp0C, sp1C)); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, sp0C->unk98[sp1C].unk0); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gStringVar3); AddTextPrinterParameterized3(sp0C->unk138.unk82, 2, 4, r6, sBerryCrushTextColorTable[0], 0, gStringVar4); } @@ -1486,10 +1463,10 @@ void sub_8021D34(struct BerryCrushGame *r8) u8 r10 = 0; u8 r6 = 0; u32 sp0C = 0; - union BerryCrushGame_68 *sp10 = &r8->unk68; + struct BerryCrushGame_68 *sp10 = &r8->unk68; u8 r7 = GetWindowAttribute(r8->unk138.unk82, WINDOW_HEIGHT) * 8 - 42; - sub_8021944(&r8->unk138, sp10->as_four_players.unk00.unk04); + sub_8021944(&r8->unk138, sp10->unk04); AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_TimeColon); r6 = 176 - (u8)GetStringWidth(2, gText_SpaceSec, -1); AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gText_SpaceSec); @@ -1521,7 +1498,7 @@ void sub_8021D34(struct BerryCrushGame *r8) AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); r7 += 14; AddTextPrinterParameterized3(r8->unk138.unk82, 2, 0, r7, sBerryCrushTextColorTable[0], 0, gText_Silkiness); - ConvertIntToDecimalStringN(gStringVar1, sp10->as_four_players.unk00.unk08, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, sp10->unk08, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_Var1Percent); r6 = 176 - (u8)GetStringWidth(2, gStringVar4, -1); AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColorTable[0], 0, gStringVar4); @@ -1562,7 +1539,7 @@ bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_138 *r6) r6->unk80 = 5; return FALSE; case 12: - sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] + 3]); + sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk68.unk20[0][7] + 3]); sub_8021A28(r4, 1, 0xA0, 8 * gUnknown_082F3344[0][r5]); r6->unk80 = 5; return FALSE; @@ -1748,13 +1725,13 @@ void sub_8022600(struct BerryCrushGame *r6) AddTextPrinterParameterized4( r6->unk138.unk83[r7], 2, - 36 - GetStringWidth(2, PLAYER_UNK14(r6, r7), 0) / 2u, + 36 - GetStringWidth(2, r6->unk98[r7].unk0, 0) / 2u, 1, 0, 0, sBerryCrushTextColorTable[1], 0, - PLAYER_UNK14(r6, r7) + r6->unk98[r7].unk0 ); } else @@ -1762,13 +1739,13 @@ void sub_8022600(struct BerryCrushGame *r6) AddTextPrinterParameterized4( r6->unk138.unk83[r7], 2, - 36 - GetStringWidth(2, PLAYER_UNK14(r6, r7), 0) / 2u, + 36 - GetStringWidth(2, r6->unk98[r7].unk0, 0) / 2u, 1, 0, 0, sBerryCrushTextColorTable[2], 0, - PLAYER_UNK14(r6, r7) + r6->unk98[r7].unk0 ); } CopyWindowToVram(r6->unk138.unk83[r7], 3); @@ -1779,22 +1756,15 @@ void sub_8022600(struct BerryCrushGame *r6) void sub_80226D0(struct BerryCrushGame *r6) { u8 r5 = 0; - const u32 *r0 = gUnknown_08DE3FD4; -#ifndef NONMATCHING // r4, r5, r6 register roulette - register u8 *r4 asm("r4") = gDecompressionBuffer; - register u32 r0_ asm("r0"); -#else - u8 *r4 = gDecompressionBuffer; - u32 r0_; -#endif + u8 * r4; - LZ77UnCompWram(r0, r4); - for (; r5 < r6->unk9; ++r5) + LZ77UnCompWram(gUnknown_08DE3FD4, gDecompressionBuffer); + + for (r4 = gDecompressionBuffer; r5 < r6->unk9; ++r5) { - r0_ = r6->unk138.unkC[r5]->unk0; CopyToBgTilemapBufferRect( 3, - &r4[r0_ * 40], + &r4[r6->unk138.unkC[r5]->unk0 * 40], r6->unk138.unkC[r5]->unk1, r6->unk138.unkC[r5]->unk2, 10, @@ -1967,7 +1937,7 @@ void sub_8022B28(struct Sprite *sprite) void sub_8022BEC(u16 r5, u8 r4, u8 *r7) { - struct BerryCrushGame *r6 = sub_8020C00(); + struct BerryCrushGame *r6 = GetBerryCrushGame(); if (r5 > 25) r5 = 0; @@ -2104,7 +2074,7 @@ static u32 sub_8022D14(struct BerryCrushGame *r7, u8 *r5) static u32 sub_8022E1C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1) { - if (sub_802104C() != 0) + if (InitBerryCrushDisplay() != 0) sub_8022BEC(r4->unkE, 0, r4->unk36); return 0; } @@ -2162,7 +2132,7 @@ static u32 sub_8022EAC(struct BerryCrushGame *r4, u8 *r5) static u32 sub_8022F04(struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1) { r0->unk4 = NULL; - SetMainCallback2(sub_8020E1C); + SetMainCallback2(BerryCrush_SetupMainTask); return 0; } @@ -2183,9 +2153,9 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2) case 2: if (!IsLinkTaskFinished()) return 0; - memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2)); - r5->unk40.unk2[0] = r5->unk68.as_four_players.others[r5->unk8].unk0; - SendBlock(0, r5->unk40.unk2, 2); + memset(r5->unk42, 0, sizeof(r5->unk42)); + r5->unk42[0] = r5->unk98[r5->unk8].unkC; + SendBlock(0, r5->unk42, 2); break; case 3: if (!IsLinkTaskFinished()) @@ -2197,11 +2167,11 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2) return 0; for (r3 = 0; r3 < r5->unk9; ++r3) { - r5->unk68.as_four_players.others[r3].unk0 = gBlockRecvBuffer[r3][0]; - if (r5->unk68.as_four_players.others[r3].unk0 > 0xB0) - r5->unk68.as_four_players.others[r3].unk0 = 0; - r5->unk18 += gUnknown_0858AB24[r5->unk68.as_four_players.others[r3].unk0].unk0; - r5->unk1C += gUnknown_0858AB24[r5->unk68.as_four_players.others[r3].unk0].unk1; + r5->unk98[r3].unkC = gBlockRecvBuffer[r3][0]; + if (r5->unk98[r3].unkC > 0xB0) + r5->unk98[r3].unkC = 0; + r5->unk18 += gUnknown_0858AB24[r5->unk98[r3].unkC].unk0; + r5->unk1C += gUnknown_0858AB24[r5->unk98[r3].unkC].unk1; } r5->unk10 = 0; ResetBlockReceivedFlags(); @@ -2359,130 +2329,125 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r void sub_802339C(struct BerryCrushGame *r4) { u8 r8 = 0; - u16 r3; - u16 *r2; u8 r7 = 0; + u16 r3; s32 r2_ = 0; - s32 r0; + struct BerryCrushGame_4E *r2; - for (r7 = 0; r7 < r4->unk9; ++r7) + for (r7 = 0; r7 < r4->unk9; r7++) { - r2 = gRecvCmds[r7]; - if ((r2[0] & 0xFF00) == RFUCMD_SEND_PACKET - && r2[1] == 2) + r2 = (struct BerryCrushGame_4E *)gRecvCmds[r7]; + if ((r2->unk0 & 0xFF00) != RFUCMD_SEND_PACKET) + continue; + if (r2->unk2 != 2) + continue; + + if (r2->unk4_2) { - if ((u8)r2[2] & 4) + r4->unk5C.unk02_3 |= gUnknown_082F325C[r7]; + r4->unk98[r7].unk1C = 1; + ++r4->unk98[r7].unk16; + ++r8; + r3 = r4->unk28 - r4->unk98[r7].unkE; + if (r3 >= r4->unk98[r7].unk12 - 1 && r3 <= r4->unk98[r7].unk12 + 1) { - r4->unk5C.unk02_3 |= gUnknown_082F325C[r7]; - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 1; - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[3]; - ++r8; - r3 = r4->unk28 - r4->unk68.as_four_players.others[r7].unk2; - if (r3 >= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] - 1 - && r3 <= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] + 1) - { - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[0]; - r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3; - if (r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] > r4->unk68.as_four_players.others[r7].unk4.as_hwords[2]) - r4->unk68.as_four_players.others[r7].unk4.as_hwords[2] = r4->unk68.as_four_players.others[r7].unk4.as_hwords[0]; - } - else - { - r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] = 0; - r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3; - } - r4->unk68.as_four_players.others[r7].unk2 = r4->unk28; - if (++r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] > 2) - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] = 0; + ++r4->unk98[r7].unk10; + r4->unk98[r7].unk12 = r3; + if (r4->unk98[r7].unk10 > r4->unk98[r7].unk14) + r4->unk98[r7].unk14 = r4->unk98[r7].unk10; } else { - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 0; + r4->unk98[r7].unk10 = 0; + r4->unk98[r7].unk12 = r3; } - } - } - if (r8 >= 2) - { - for (r7 = 0; r7 < r4->unk9; ++r7) - { - if (r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] != 0) - { - r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] |= 2; - ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[4]; - } - } - } - if (r8 != 0) - { - r4->unk2E += r8; - r8 += gUnknown_082F3264[r8 - 1]; - r4->unk34 += r8; - r4->unk1A += r8; - r0 = r4->unk18; - r2_ = r4->unk1A; - if (r0 - r2_ > 0) - { - r2_ = Q_24_8(r2_); - r2_ = MathUtil_Div32(r2_, r4->unk20); - r2_ = Q_24_8_TO_INT(r2_); - r4->unk24 = r2_; + r4->unk98[r7].unkE = r4->unk28; + ++r4->unk98[r7].unk1B; + if (r4->unk98[r7].unk1B > 2) + r4->unk98[r7].unk1B = 0; } else { - r4->unk24 = 32; - r4->unk5C.unk02_0 = 1; + r4->unk98[r7].unk1C = 0; } } + if (r8 > 1) + { + for (r7 = 0; r7 < r4->unk9; ++r7) + { + if (!r4->unk98[r7].unk1C) + continue; + r4->unk98[r7].unk1C |= 2; + ++r4->unk98[r7].unk18; + } + } + if (r8 == 0) + return; + + r4->unk2E += r8; + r8 += gUnknown_082F3264[r8 - 1]; + r4->unk34 += r8; + r4->unk1A += r8; + if (r4->unk18 - r4->unk1A > 0) + { + r2_ = (s32)r4->unk1A; + r2_ <<= 8; + r2_ = MathUtil_Div32(r2_, r4->unk20); + r2_ >>= 8; + r4->unk24 = (u8)r2_; + return; + } + + r4->unk24 = 32; + r4->unk5C.unk02_0 = 1; } void sub_8023558(struct BerryCrushGame *r3) { u8 r6 = 0; u16 r1 = 0; + u16 r2 = 0; u8 r4 = 0; for (r4 = 0; r4 < r3->unk9; ++r4) { - if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] != 0) + if (r3->unk98[r4].unk1C != 0) { ++r6; - r1 = r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][4] + 1; - if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] & 2) + r1 = r3->unk98[r4].unk1B + 1; + if (r3->unk98[r4].unk1C & 2) r1 |= 4; r1 <<= 3 * r4; r3->unk5C.unk08 |= r1; } } - r3->unk5C.unk04 = r3->unk24; + r2 = (u16)r3->unk24; + r3->unk5C.unk04 = r2; if (r6 == 0) { if (r3->unk138.unk3 != 0) ++r3->unk138.unk0; + } + else if (r3->unk138.unk3 != 0) + { + if (r6 != r3->unk138.unk1) + { + r3->unk138.unk1 = r6 - 1; + r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0]; + } else - goto SET_UNK5F_0; + { + ++r3->unk138.unk0; + } } else { - if (r3->unk138.unk3 != 0) - { - if (r6 != r3->unk138.unk1) - { - r3->unk138.unk1 = r6 - 1; - r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0]; - } - else - { - ++r3->unk138.unk0; - } - } - else - { - r3->unk138.unk0 = 0; - r3->unk138.unk1 = r6 - 1; - r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0]; - r3->unk138.unk3 = 1; - } + r3->unk138.unk0 = 0; + r3->unk138.unk1 = r6 - 1; + r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0]; + r3->unk138.unk3 = 1; } + if (r3->unk138.unk3 != 0) { if (r3->unk138.unk0 >= r3->unk138.unk2) @@ -2497,11 +2462,10 @@ void sub_8023558(struct BerryCrushGame *r3) { r1 = gUnknown_082F3290[r3->unk138.unk1][r3->unk138.unk0 + 1]; } - r3->unk5C.unk03 = r1; + r3->unk5C.unk03 = (u8)r1; } else { - SET_UNK5F_0: r3->unk5C.unk03 = 0; } r3->unk5C.unk06 = r3->unk26; @@ -2513,8 +2477,8 @@ void sub_80236B8(struct BerryCrushGame *r5) r5->unk5C.unk02_2 = 1; if (JOY_HELD(A_BUTTON)) { - if (r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5] < r5->unk28) - ++r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5]; + if (r5->unk98[r5->unk8].unk1A < r5->unk28) + ++r5->unk98[r5->unk8].unk1A; } if (r5->unk8 != 0 && r5->unk5C.unk02_2 == 0) return; @@ -2569,51 +2533,44 @@ void sub_80236B8(struct BerryCrushGame *r5) r5->unk5C.unk02_0 = 1; r5->unk5C.unk02_1 = r5->unk25_4; r5->unk5C.unk0A = r5->unk25_5; - memcpy(r5->unk40.unk2, &r5->unk5C, sizeof(r5->unk40.unk2)); - Rfu_SendPacket(r5->unk40.unk2); + memcpy(r5->unk42, &r5->unk5C, sizeof(r5->unk42)); + Rfu_SendPacket(r5->unk42); } void sub_802385C(struct BerryCrushGame *r5) { - struct BerryCrushGame_4E *r4_; -#ifndef NONMATCHING - register u32 r4 asm("r4"); - register u32 r0 asm("r0"); + u8 r4 = 0; + struct BerryCrushGame_4E *r4_ = NULL; - for (r4 = 0; r4 < r5->unk9; r4 = (u8)r0) - { - r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; - r0 = r4 + 1; - } -#else - u8 r4; - - for (r4 = 0; r4 < r5->unk9; ++r4) - r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; -#endif - - if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET - || gRecvCmds[0][1] != 2) + for (r4 = 0; r4 < r5->unk9; r4++) + r5->unk98[r4].unk1C = 0; + if ((gRecvCmds[0][0] & 0xFF00) != RFUCMD_SEND_PACKET) { r5->unk25_2 = 0; + return; } - else + if (gRecvCmds[0][1] != 2) { - r4_ = &r5->unk40.unkE; - memcpy(r4_, gRecvCmds, sizeof(struct BerryCrushGame_4E)); - r5->unk2A = r4_->unk6; - r5->unk2C = r4_->unk5; - r5->unk28 = r4_->unk8; - sub_80216E0(r5, &r5->unk138); - if (r4_->unk4_0) - r5->unk25_3 = 1; + r5->unk25_2 = 0; + return; + } + + memcpy(r5->unk4E, gRecvCmds[0], 14); + r4_ = (struct BerryCrushGame_4E *)&r5->unk4E; + r5->unk2A = r4_->unk6; + r5->unk2C = (s16)r4_->unk5; + r5->unk28 = r4_->unk8; + sub_80216E0(r5, &(r5->unk138)); + if (r4_->unk4_0) + { + r5->unk25_3 = 1; } } static u32 sub_80238F0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1) { memset(&r4->unk5C, 0, sizeof(r4->unk5C)); - memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE)); + memset(&r4->unk4E, 0, sizeof(r4->unk4E)); sub_802385C(r4); SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); @@ -2646,7 +2603,7 @@ static u32 sub_80238F0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 static u32 sub_8023998(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1) { memset(&r4->unk5C, 0, sizeof(r4->unk5C)); - memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE)); + memset(&r4->unk4E, 0, sizeof(r4->unk4E)); sub_802385C(r4); SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); @@ -2772,19 +2729,19 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6) static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1) { - u8 r8, r4_; + u8 r8, r4_, r3; s32 r2; s32 r4; - u8 r6; // ??? + u16 r6; switch (r7->unkC) { case 0: - memset(r7->unk40.unk2, 0, 2 * sizeof(u16)); - if (r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5] > r7->unk28) - r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5] = r7->unk28; - r7->unk40.unk2[0] = r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5]; - SendBlock(0, r7->unk40.unk2, 2); + memset(r7->unk42, 0, 2 * sizeof(u16)); + if (r7->unk98[r7->unk8].unk1A > r7->unk28) + r7->unk98[r7->unk8].unk1A = r7->unk28; + r7->unk42[0] = r7->unk98[r7->unk8].unk1A; + SendBlock(0, r7->unk42, 2); break; case 1: if (!IsLinkTaskFinished()) @@ -2795,9 +2752,9 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 if (GetBlockReceivedStatus() != gUnknown_082F4448[r7->unk9 - 2]) return 0; for (r8 = 0; r8 < r7->unk9; ++r8) - r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] = gBlockRecvBuffer[r8][0]; + r7->unk98[r8].unk1A = gBlockRecvBuffer[r8][0]; r7->unk10 = 0; - r7->unk40.unk2[0] = 0; + r7->unk42[0] = 0; ResetBlockReceivedFlags(); if (r7->unk8 == 0) r7->unkC = 3; @@ -2805,38 +2762,34 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 r7->unkC = 6; return 0; case 3: - memset( - &r7->unk68, - 0, - sizeof(struct BerryCrushGame_68_x_SubStruct) - ); - r7->unk68.as_four_players.unk00.unk04 = r7->unk28; - r7->unk68.as_four_players.unk00.unk06 = r7->unk18 / (r7->unk28 / 60); + memset(&r7->unk68, 0, sizeof(struct BerryCrushGame_68)); + r7->unk68.unk04 = r7->unk28; + r7->unk68.unk06 = r7->unk18 / (r7->unk28 / 60); r2 = MathUtil_Mul32(Q_24_8(r7->unk30), Q_24_8(50)); r2 = MathUtil_Div32(r2, Q_24_8(r7->unk32)) + Q_24_8(50); r2 = Q_24_8_TO_INT(r2); - r7->unk68.as_four_players.unk00.unk08 = r2 & 0x7F; + r7->unk68.unk08 = r2 & 0x7F; r2 = Q_24_8(r2); r2 = MathUtil_Div32(r2, Q_24_8(100)); r4 = Q_24_8(r7->unk1C * r7->unk9); r4 = MathUtil_Mul32(r4, r2); - r7->unk68.as_four_players.unk00.unk00 = r4 >> 8; - r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] = Random() % 3; - for (r6 = 0, r8 = 0; r8 < r7->unk9; ++r8) + r7->unk68.unk00 = r4 >> 8; + r7->unk68.unk20[0][7] = Random() % 3; + for (r8 = 0; r8 < r7->unk9; ++r8) { - r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][r8] = r8; - r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[1][r8] = r8; - r7->unk68.as_four_players.unk00.unk0C[0][r8] = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; - r7->unk68.as_four_players.unk00.unk0A += r7->unk68.as_four_players.unk00.unk0C[0][r8]; - switch (r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7]) + r7->unk68.unk20[0][r8] = r8; + r7->unk68.unk20[1][r8] = r8; + r7->unk68.unk0C[0][r8] = r7->unk98[r8].unk16; + r7->unk68.unk0A += r7->unk68.unk0C[0][r8]; + switch (r7->unk68.unk20[0][7]) { case 0: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0) + if (r7->unk98[r8].unk16 != 0) { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[2]; + r2 = r7->unk98[r8].unk14; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); - r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r4 = r7->unk98[r8].unk16; r4 = Q_24_8(r4); r4 = MathUtil_Div32(r2, r4); } @@ -2846,12 +2799,12 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 } break; case 1: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0) + if (r7->unk98[r8].unk16 != 0) { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[4]; + r2 = r7->unk98[r8].unk18; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); - r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r4 = r7->unk98[r8].unk16; r4 = Q_24_8(r4); r4 = MathUtil_Div32(r2, r4); } @@ -2861,17 +2814,17 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 } break; case 2: - if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] == 0) + if (r7->unk98[r8].unk16 == 0) { r4 = 0; } - else if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] >= r7->unk28) + else if (r7->unk98[r8].unk1A >= r7->unk28) { r4 = 0x6400; } else { - r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[5]; + r2 = r7->unk98[r8].unk1A; r2 = Q_24_8(r2); r2 = MathUtil_Mul32(r2, Q_24_8(100)); r4 = r7->unk28; @@ -2881,51 +2834,35 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 break; } r4 >>= 4; - r7->unk68.as_four_players.unk00.unk0C[1][r8] = r4; + r7->unk68.unk0C[1][r8] = r4; } break; case 4: - for (r6 = 0, r8 = 0; r8 < r7->unk9 - 1; ++r8) + for (r8 = 0; r8 < r7->unk9 - 1; ++r8) { for (r4_ = r7->unk9 - 1; r4_ > r8; --r4_) { - u16 r0; - u8 r3; - u16 *sp00 = r7->unk68.as_four_players.unk00.unk0C[0]; - u8 *sp04 = r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0]; - u8 *r10 = r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[1]; - u16 *r9 = r7->unk68.as_four_players.unk00.unk0C[1]; - s32 r12 = r4_ - 1; - u16 *p1 = sp00 + r12; // these have to be here - u16 *p2 = sp00 + r4_; // to swap operands. macro? - - if (*p1 < *p2) + if (r7->unk68.unk0C[0][r4_ - 1] < r7->unk68.unk0C[0][r4_]) { - r0 = sp00[r4_]; - sp00[r4_] = sp00[r12]; - sp00[r12] = r0; - r3 = sp04[r4_]; - sp04[r4_] = sp04[r12]; - sp04[r12] = r3; + r6 = r7->unk68.unk0C[0][r4_]; + r7->unk68.unk0C[0][r4_] = r7->unk68.unk0C[0][r4_ - 1]; + r7->unk68.unk0C[0][r4_ - 1] = r6; + r3 = r7->unk68.unk20[0][r4_]; + r7->unk68.unk20[0][r4_] = r7->unk68.unk20[0][r4_ - 1]; + r7->unk68.unk20[0][r4_ - 1] = r3; } - p1 = r9 + r12; - p2 = r9 + r4_; - if (*p1 < *p2) + if (r7->unk68.unk0C[1][r4_ - 1] < r7->unk68.unk0C[1][r4_]) { - r0 = r9[r4_]; - r9[r4_] = r9[r12]; - r9[r12] = r0; - r3 = r10[r4_]; - r10[r4_] = r10[r12]; - r10[r12] = r3; + r6 = r7->unk68.unk0C[1][r4_]; + r7->unk68.unk0C[1][r4_] = r7->unk68.unk0C[1][r4_ - 1]; + r7->unk68.unk0C[1][r4_ - 1] = r6; + r3 = r7->unk68.unk20[1][r4_]; + r7->unk68.unk20[1][r4_] = r7->unk68.unk20[1][r4_ - 1]; + r7->unk68.unk20[1][r4_ - 1] = r3; } } } - SendBlock( - 0, - &r7->unk68, - sizeof(struct BerryCrushGame_68_x_SubStruct) - ); + SendBlock(0,&r7->unk68, sizeof(struct BerryCrushGame_68)); break; case 5: if (!IsLinkTaskFinished()) @@ -2935,21 +2872,13 @@ static u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1 case 6: if (GetBlockReceivedStatus() != 1) return 0; - memset( - &r7->unk68, - 0, - sizeof(struct BerryCrushGame_68_x_SubStruct) - ); - memcpy( - &r7->unk68, - gBlockRecvBuffer, - sizeof(struct BerryCrushGame_68_x_SubStruct) - ); + memset(&r7->unk68, 0, sizeof(struct BerryCrushGame_68)); + memcpy(&r7->unk68, gBlockRecvBuffer, sizeof(struct BerryCrushGame_68)); ResetBlockReceivedFlags(); r7->unk10 = 0; break; case 7: - sub_8020E58(); + BerryCrush_SaveResults(); sub_8022BEC(18, 1, NULL); r7->unk12 = 11; r7->unkC = 0; @@ -3043,12 +2972,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4) static u32 sub_8024228(struct BerryCrushGame *r5, u8 *r6) { - s32 r4; -#ifndef NONMATCHING - register s32 r0 asm("r0"); -#else - s32 r0; -#endif + s8 r4 = 0; switch (r5->unkC) { @@ -3056,16 +2980,16 @@ static u32 sub_8024228(struct BerryCrushGame *r5, u8 *r6) sub_8024644(r6, 4, 0, 0, 1); r5->unkE = 20; sub_8022BEC(3, 1, NULL); - r0 = 0; - r5->unkC = r0; // dunno what it's doing because it's already in case 0 + r5->unkC = 0; // dunno what it's doing because it's already in case 0 return 0; case 1: DisplayYesNoMenuDefaultYes(); break; case 2: - if ((r4 = Menu_ProcessInputNoWrapClearOnChoose()) != -2) + r4 = Menu_ProcessInputNoWrapClearOnChoose(); + if (r4 != -2) { - memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2)); + memset(r5->unk42, 0, sizeof(r5->unk42)); if (r4 == 0) { if (HasAtLeastOneBerry()) @@ -3101,9 +3025,9 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 case 1: if (!IsLinkTaskFinished()) return 0; - r4->unk40.unk2[0] = r4->unk14; - r4->unk40.unkE.unk0 = 0; - SendBlock(0, r4->unk40.unk2, sizeof(u16)); + r4->unk42[0] = r4->unk14; + r4->unk4E[0] = 0; + SendBlock(0, r4->unk42, sizeof(u16)); break; case 2: if (!IsLinkTaskFinished()) @@ -3114,14 +3038,14 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1 if (GetBlockReceivedStatus() != gUnknown_082F4448[r4->unk9 - 2]) return 0; for (; r5 < r4->unk9; ++r5) - r4->unk40.unkE.unk0 += gBlockRecvBuffer[r5][0]; - if (r4->unk40.unkE.unk0 != 0) + r4->unk4E[0] += gBlockRecvBuffer[r5][0]; + if (r4->unk4E[0] != 0) sub_8022BEC(23, 1, NULL); else sub_8022BEC(22, 1, NULL); ResetBlockReceivedFlags(); - r4->unk40.unk2[0] = 0; - r4->unk40.unkE.unk0 = 0; + r4->unk42[0] = 0; + r4->unk4E[0] = 0; r4->unk10 = 0; r4->unkC = 0; return 0; @@ -3217,15 +3141,10 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1 static u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1) { - sub_8020C0C(NULL); + QuitBerryCrush(NULL); return 0; } -#if MODERN -// TODO remove this as soon as the code below is understood -// add a UBFIX if required (code buggy?) -__attribute__((optimize("no-aggressive-loop-optimizations"))) -#endif void sub_8024578(struct BerryCrushGame *r4) { u8 r5 = 0; @@ -3252,18 +3171,18 @@ void sub_8024578(struct BerryCrushGame *r4) r4->unk32 = -1; r4->unk30 = 0; r4->unk34 = 0; - for (; r5 < 5; ++r5) // why is it 5 instead of 4? fillerBC isn't sufficient for one player + for (; r5 < 5; ++r5) { - r4->unk68.as_four_players.others[r5].unk0 = -1; - r4->unk68.as_four_players.others[r5].unk2 = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[0] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[1] = 1; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[2] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[3] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[4] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_hwords[5] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][4] = 0; - r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][5] = 0; + r4->unk98[r5].unkC = -1; + r4->unk98[r5].unkE = 0; + r4->unk98[r5].unk10 = 0; + r4->unk98[r5].unk12 = 1; + r4->unk98[r5].unk14 = 0; + r4->unk98[r5].unk16 = 0; + r4->unk98[r5].unk18 = 0; + r4->unk98[r5].unk1A = 0; + r4->unk98[r5].unk1B = 0; + r4->unk98[r5].unk1C = 0; } } @@ -3281,11 +3200,14 @@ static void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, params[9] = communicateAfter; } -void sub_8024644(u8 *r0, u8 r1, u8 r2, u16 r3, u8 r5) +void sub_8024644(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5) { + u8 sp[4]; + + 0[(u16 *)sp] = r3; r0[0] = r1; r0[1] = r2; - r0[2] = ((u8 *)&r3)[0]; - r0[3] = ((u8 *)&r3)[1]; + r0[2] = sp[0]; + r0[3] = sp[1]; r0[4] = r5; } diff --git a/src/birch_pc.c b/src/birch_pc.c index 5b574b05d7..1f0ab23498 100644 --- a/src/birch_pc.c +++ b/src/birch_pc.c @@ -2,7 +2,6 @@ #include "event_data.h" #include "field_message_box.h" #include "pokedex.h" -#include "constants/species.h" #include "strings.h" bool16 ScriptGetPokedexInfo(void) diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index a1ea44e26e..aa6664f356 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -8,7 +8,6 @@ #include "constants/field_effects.h" #include "constants/maps.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/metatile_labels.h" #include "fieldmap.h" #include "party_menu.h" diff --git a/src/confetti_util.c b/src/confetti_util.c index 6d47700567..3bda3ab539 100644 --- a/src/confetti_util.c +++ b/src/confetti_util.c @@ -30,8 +30,10 @@ static void sub_81520A8(void *dest, u16 value, u8 left, u8 top, u8 width, u8 hei static void sub_8152134(void *dest, const u16 *src, u8 left, u8 top, u8 width, u8 height) // Unused. { - u8 i, j; - u8 x, y; + u8 i; + u8 j; + u8 x; + u8 y; const u16 *_src; for (i = 0, _src = src, y = top; i < height; i++) diff --git a/src/contest.c b/src/contest.c index 612d79562d..40a0eac66b 100644 --- a/src/contest.c +++ b/src/contest.c @@ -42,7 +42,6 @@ #include "constants/moves.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/tv.h" // This file's functions. @@ -951,39 +950,39 @@ const struct SpriteTemplate sSpriteTemplates_ContestantsTurnBlinkEffect[CONTESTA static const s8 gContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGORIES_COUNT] = { - [CONTEST_CATEGORY_COOL] = { - [CONTEST_CATEGORY_COOL] = +1, - [CONTEST_CATEGORY_BEAUTY] = 0, - [CONTEST_CATEGORY_CUTE] = -1, - [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_COOL] = { + [CONTEST_CATEGORY_COOL] = +1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = -1, [CONTEST_CATEGORY_TOUGH] = 0 }, - [CONTEST_CATEGORY_BEAUTY] = { - [CONTEST_CATEGORY_COOL] = 0, - [CONTEST_CATEGORY_BEAUTY] = +1, - [CONTEST_CATEGORY_CUTE] = 0, - [CONTEST_CATEGORY_SMART] = -1, + [CONTEST_CATEGORY_BEAUTY] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = +1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = -1, [CONTEST_CATEGORY_TOUGH] = -1 }, [CONTEST_CATEGORY_CUTE] = { - [CONTEST_CATEGORY_COOL] = -1, - [CONTEST_CATEGORY_BEAUTY] = 0, - [CONTEST_CATEGORY_CUTE] = +1, - [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = 0, + [CONTEST_CATEGORY_CUTE] = +1, + [CONTEST_CATEGORY_SMART] = 0, [CONTEST_CATEGORY_TOUGH] = -1 }, [CONTEST_CATEGORY_SMART] = { - [CONTEST_CATEGORY_COOL] = -1, - [CONTEST_CATEGORY_BEAUTY] = -1, - [CONTEST_CATEGORY_CUTE] = 0, - [CONTEST_CATEGORY_SMART] = +1, + [CONTEST_CATEGORY_COOL] = -1, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = 0, + [CONTEST_CATEGORY_SMART] = +1, [CONTEST_CATEGORY_TOUGH] = 0 }, - [CONTEST_CATEGORY_TOUGH] = { - [CONTEST_CATEGORY_COOL] = 0, - [CONTEST_CATEGORY_BEAUTY] = -1, - [CONTEST_CATEGORY_CUTE] = -1, - [CONTEST_CATEGORY_SMART] = 0, + [CONTEST_CATEGORY_TOUGH] = { + [CONTEST_CATEGORY_COOL] = 0, + [CONTEST_CATEGORY_BEAUTY] = -1, + [CONTEST_CATEGORY_CUTE] = -1, + [CONTEST_CATEGORY_SMART] = 0, [CONTEST_CATEGORY_TOUGH] = +1 } }; @@ -3119,9 +3118,9 @@ static u8 CreateContestantSprite(u16 species, u32 otId, u32 personality, u32 ind species = SanitizeSpecies(species); if (index == gContestPlayerMonIndex) - HandleLoadSpecialPokePic_2(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality); + HandleLoadSpecialPokePic_2(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites.ptr[0], species, personality); else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[0], species, personality); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites.ptr[0], species, personality); LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); SetMultiuseSpriteTemplateToPokemon(species, 0); @@ -3408,7 +3407,8 @@ static void GetAllChosenMoves(void) static void RankContestants(void) { - s32 i, j; + s32 i; + s32 j; s16 arr[CONTESTANT_COUNT]; for (i = 0; i < CONTESTANT_COUNT; i++) @@ -3483,7 +3483,8 @@ static bool8 ContestantCanUseTurn(u8 contestant) { if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) return FALSE; - return TRUE; + else + return TRUE; } static void SetContestantStatusesForNextRound(void) @@ -3537,7 +3538,8 @@ bool8 Contest_IsMonsTurnDisabled(u8 contestant) { if (eContestantStatus[contestant].numTurnsSkipped != 0 || eContestantStatus[contestant].noMoreTurns) return TRUE; - return FALSE; + else + return FALSE; } static void CalculateTotalPointsForContestant(u8 contestant) @@ -4480,14 +4482,17 @@ static void CalculateAppealMoveImpact(u8 contestant) eContestantStatus[contestant].comboAppealBonus = eContestantStatus[contestant].baseAppeal * eContestantStatus[contestant].completedCombo; eContestantStatus[contestant].completedComboFlag = TRUE; // Redundant with completedCombo, used by AI } - else if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) - { - eContestantStatus[contestant].hasJudgesAttention = TRUE; - eContestantStatus[contestant].usedComboMove = TRUE; - } else { - eContestantStatus[contestant].hasJudgesAttention = FALSE; + if (gContestMoves[eContestantStatus[contestant].currMove].comboStarterId != 0) + { + eContestantStatus[contestant].hasJudgesAttention = TRUE; + eContestantStatus[contestant].usedComboMove = TRUE; + } + else + { + eContestantStatus[contestant].hasJudgesAttention = FALSE; + } } } if (eContestantStatus[contestant].repeatedMove) @@ -5010,7 +5015,7 @@ static void ShowHideNextTurnGfx(bool8 show) { if (eContestantStatus[i].turnOrderMod != 0 && show) { - CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(VRAM + 0x10000 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); + CpuCopy32(GetTurnOrderNumberGfx(i), (void *)(OBJ_VRAM0 + (gSprites[eContestGfxState[i].nextTurnSpriteId].oam.tileNum + 6) * 32), 32); gSprites[eContestGfxState[i].nextTurnSpriteId].pos1.y = sNextTurnSpriteYPositions[gContestantTurnOrder[i]]; gSprites[eContestGfxState[i].nextTurnSpriteId].invisible = FALSE; } @@ -5411,7 +5416,7 @@ static void Contest_PrintTextToBg0WindowStd(u32 windowId, const u8 *b) printerTemplate.currentY = 1; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = 15; printerTemplate.bgColor = 0; printerTemplate.shadowColor = 8; @@ -5434,7 +5439,7 @@ void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s3 printerTemplate.currentY = y; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = 15; printerTemplate.bgColor = 0; printerTemplate.shadowColor = 8; @@ -5458,7 +5463,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b) printerTemplate.currentY = 1; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = 1; printerTemplate.bgColor = 0; printerTemplate.shadowColor = 8; @@ -6093,4 +6098,3 @@ void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 langua } } - diff --git a/src/contest_ai.c b/src/contest_ai.c index 2f048718ff..8fe339790a 100644 --- a/src/contest_ai.c +++ b/src/contest_ai.c @@ -1734,8 +1734,9 @@ static void ContestAICmd_if_user_doesnt_have_exciting_move(void) // they're checking for an effect. Checking for a specific effect would make more sense, // but given that effects are normally read as a single byte and this reads 2 bytes, it // seems reading a move was intended and the AI script is using it incorrectly. -// In any case, to fix it to correctly check for effects replace the u16 move assignment with -// u16 move = gContestMoves[gContestMons[eContestAI.contestantId].moves[i]].effect; +// The fix below aligns the function with how it's used by the script, rather than the apparent +// intention of its usage + static void ContestAICmd_check_user_has_move(void) { int hasMove = FALSE; @@ -1744,7 +1745,12 @@ static void ContestAICmd_check_user_has_move(void) for (i = 0; i < MAX_MON_MOVES; i++) { + #ifdef BUGFIX + u16 move = gContestMoves[gContestMons[eContestAI.contestantId].moves[i]].effect; + #else u16 move = gContestMons[eContestAI.contestantId].moves[i]; + #endif + if (move == targetMove) { hasMove = TRUE; diff --git a/src/contest_painting.c b/src/contest_painting.c index ceef8a9021..1602eb94f1 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -368,19 +368,19 @@ static void InitContestMonPixels(u16 species, u8 whichSprite) { HandleLoadSpecialPokePic_DontHandleDeoxys( &gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], species, gContestPaintingWinner->personality); - _InitContestMonPixels(gMonSpritesGfxPtr->sprites[1], gContestPaintingMonPalette, (void *)gContestMonPixels); + _InitContestMonPixels(gMonSpritesGfxPtr->sprites.ptr[1], gContestPaintingMonPalette, (void *)gContestMonPixels); } else { HandleLoadSpecialPokePic_DontHandleDeoxys( &gMonBackPicTable[species], - gMonSpritesGfxPtr->sprites[0], + gMonSpritesGfxPtr->sprites.ptr[0], species, gContestPaintingWinner->personality); - _InitContestMonPixels(gMonSpritesGfxPtr->sprites[0], gContestPaintingMonPalette, (void *)gContestMonPixels); + _InitContestMonPixels(gMonSpritesGfxPtr->sprites.ptr[0], gContestPaintingMonPalette, (void *)gContestMonPixels); } } @@ -397,16 +397,16 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels) { for (pixelX = 0; pixelX < 8; pixelX++) { - colorIndex = spriteGfx[((tileY * 8) + tileX) * 32 + (pixelY << 2) + (pixelX >> 1)]; + colorIndex = spriteGfx[32 * (tileY * 8 + tileX) + (pixelY << 2) + (pixelX >> 1)]; if (pixelX & 1) colorIndex >>= 4; else - colorIndex &= 0xF; // %=16 works here too. Both match + colorIndex &= 0xF; - if (colorIndex == 0) // transparent pixel - (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = 0x8000; + if (colorIndex == 0) // transparent pixel + (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000; else - (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; + (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; } } } @@ -501,7 +501,6 @@ static void LoadContestPaintingFrame(u8 contestWinnerId, bool8 arg1) static void InitPaintingMonOamData(u8 contestWinnerId) { - gMain.oamBuffer[0] = sContestPaintingMonOamData; gMain.oamBuffer[0].tileNum = 0; @@ -512,7 +511,7 @@ static void InitPaintingMonOamData(u8 contestWinnerId) } else { - gMain.oamBuffer[0].x = 88; // Duplicated Code + gMain.oamBuffer[0].x = 88; // Duplicated code gMain.oamBuffer[0].y = 24; } } diff --git a/src/contest_util.c b/src/contest_util.c index ae76eda6b4..e690a3bbe9 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -166,11 +166,6 @@ static void SpriteCB_Confetti(struct Sprite *sprite); static void Task_ShowContestEntryMonPic(u8 taskId); static void Task_LinkContestWaitForConnection(u8 taskId); -extern const u16 gObjectEventPalette8[]; -extern const u16 gObjectEventPalette17[]; -extern const u16 gObjectEventPalette33[]; -extern const u16 gObjectEventPalette34[]; - static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal"); static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp"); static const u16 sMiscBlank_Pal[] = INCBIN_U16("graphics/interface/blank.gbapal"); @@ -880,7 +875,7 @@ static void Task_ShowWinnerMonBanner(u8 taskId) { HandleLoadSpecialPokePic_2( &gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], species, personality); } @@ -888,7 +883,7 @@ static void Task_ShowWinnerMonBanner(u8 taskId) { HandleLoadSpecialPokePic_DontHandleDeoxys( &gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], species, personality); } @@ -1151,12 +1146,12 @@ static void TryCreateWirelessSprites(void) static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) { u16 windowId; - s32 origWidth, strWidth; + int origWidth; + int strWidth; u8 *spriteTilePtrs[4]; u8 *dst; - { - struct WindowTemplate windowTemplate; //It's important the lifetime of this struct ends after the clear + struct WindowTemplate windowTemplate; memset(&windowTemplate, 0, sizeof(windowTemplate)); windowTemplate.width = 30; windowTemplate.height = 2; @@ -1165,33 +1160,33 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) } origWidth = GetStringWidth(1, text, 0); - if ((strWidth = (origWidth + 9) / 8) > 30) - strWidth = 30; + strWidth = (origWidth + 9) / 8; + if (strWidth > 30) + strWidth = 30; AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text); - { s32 i; struct Sprite *sprite; const u8 *src, *windowTilesPtr; - windowTilesPtr = (const u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA)); - src = sUnknown_0858D6D0; + windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA)); + src = (u8 *)(sUnknown_0858D6D0); sprite = &gSprites[spriteId]; - spriteTilePtrs[0] = (u8 *)((OBJ_VRAM0) + sprite->oam.tileNum * 32); + spriteTilePtrs[0] = (u8 *)(sprite->oam.tileNum * 32 + OBJ_VRAM0); for (i = 1; i < 4; i++) - spriteTilePtrs[i] = (u8 *)((OBJ_VRAM0) + gSprites[sprite->data[i - 1]].oam.tileNum * 32); - + spriteTilePtrs[i] = (void*)(gSprites[sprite->data[i - 1]].oam.tileNum * 32 + OBJ_VRAM0); + for (i = 0; i < 4; i++) CpuFill32(0, spriteTilePtrs[i], 0x400); - + dst = spriteTilePtrs[0]; CpuCopy32(src, dst, 0x20); CpuCopy32(src + 128, dst + 0x100, 0x20); CpuCopy32(src + 128, dst + 0x200, 0x20); - CpuCopy32(src + 64, dst + 0x300, 0x20); - + CpuCopy32(src + 64, dst + 0x300, 0x20); + for (i = 0; i < strWidth; i++) { dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; @@ -1203,10 +1198,10 @@ static s32 DrawResultsTextWindow(const u8 *text, u8 spriteId) } dst = &spriteTilePtrs[(i + 1) / 8][((i + 1) % 8) * 32]; - CpuCopy32(src + 32, dst, 0x20); + CpuCopy32(src + 32, dst, 0x20); CpuCopy32(src + 160, dst + 0x100, 0x20); CpuCopy32(src + 160, dst + 0x200, 0x20); - CpuCopy32(src + 96, dst + 0x300, 0x20); + CpuCopy32(src + 96, dst + 0x300, 0x20); } RemoveWindow(windowId); @@ -1922,7 +1917,7 @@ static void AddContestTextPrinter(int windowId, u8 *str, int x) textPrinter.currentY = 2; textPrinter.letterSpacing = 0; textPrinter.lineSpacing = 0; - textPrinter.style = 0; + textPrinter.unk = 0; textPrinter.fgColor = 1; textPrinter.bgColor = 0; textPrinter.shadowColor = 8; @@ -2488,16 +2483,16 @@ void LoadLinkContestPlayerPalettes(void) if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) { if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_RubySapphireBrendan, 0x160 + i * 0x10, 0x20); else - LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_RubySapphireMay, 0x160 + i * 0x10, 0x20); } else { if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_Brendan, 0x160 + i * 0x10, 0x20); else - LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20); + LoadPalette(gObjectEventPal_May, 0x160 + i * 0x10, 0x20); } } } @@ -2552,9 +2547,9 @@ void ShowContestEntryMonPic(void) gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = species; if (gSpecialVar_0x8006 == gContestPlayerMonIndex) - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); LoadCompressedSpritePalette(palette); diff --git a/src/credits.c b/src/credits.c index 86a659d5a7..41d1c16866 100644 --- a/src/credits.c +++ b/src/credits.c @@ -22,7 +22,6 @@ #include "pokedex.h" #include "event_data.h" #include "random.h" -#include "constants/species.h" enum { diff --git a/src/crt0.s b/src/crt0.s index cb7c93a6bc..49f214f80d 100644 --- a/src/crt0.s +++ b/src/crt0.s @@ -91,6 +91,10 @@ Init: @ 8000204 ldr r1, =INTR_VECTOR adr r0, IntrMain str r0, [r1] + .if MODERN + mov r0, #255 @ RESET_ALL + svc #1 << 16 + .endif @ MODERN ldr r1, =AgbMain + 1 mov lr, pc bx r1 diff --git a/src/data.c b/src/data.c index 8d6640223c..4861da18b5 100644 --- a/src/data.c +++ b/src/data.c @@ -5,7 +5,6 @@ #include "graphics.h" #include "constants/items.h" #include "constants/moves.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/battle_ai.h" @@ -296,11 +295,6 @@ const union AnimCmd *const gUnknown_082FF70C[] = #define SPECIES_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species} #define SPECIES_SHINY_PAL(species, pal) [SPECIES_##species] = {pal, SPECIES_##species + SPECIES_SHINY_TAG} -#define TRAINER_SPRITE(trainerPic, sprite, size) [TRAINER_PIC_##trainerPic] = {sprite, size, TRAINER_PIC_##trainerPic} -#define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} - -#define TRAINER_BACK_PAL(trainerPic, pal) [TRAINER_BACK_PIC_##trainerPic] = {pal, TRAINER_BACK_PIC_##trainerPic} - #include "data/pokemon_graphics/unknown_anims.h" #include "data/pokemon_graphics/front_pic_coordinates.h" #include "data/pokemon_graphics/still_front_pic_table.h" diff --git a/src/data/bard_music/pokemon.h b/src/data/bard_music/pokemon.h index 112a5870bc..5ccf2f830d 100644 --- a/src/data/bard_music/pokemon.h +++ b/src/data/bard_music/pokemon.h @@ -1,6 +1,5 @@ #ifndef GUARD_DATA_BARD_MUSIC_POKEMON_H #define GUARD_DATA_BARD_MUSIC_POKEMON_H -#include "constants/species.h" const u16 gNumSpeciesNames = NUM_SPECIES; diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index 1b41024d0a..d8bd575765 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -1244,12 +1244,12 @@ static const struct TrHillFloor sDataTagNormal_Floors[] = .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xCB, .nickname = _("SKITTY"), @@ -2717,11 +2717,11 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .spAttackEV = 255, .otId = TRAINER_HILL_OTID, .hpIV = 30, - .attackIV = 31, + .attackIV = MAX_PER_STAT_IVS, .defenseIV = 30, - .speedIV = 31, + .speedIV = MAX_PER_STAT_IVS, .spAttackIV = 30, - .spDefenseIV = 31, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x202, .nickname = _("UNOWN"), @@ -2738,11 +2738,11 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .spAttackEV = 255, .otId = TRAINER_HILL_OTID, .hpIV = 30, - .attackIV = 31, - .defenseIV = 31, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, .speedIV = 30, .spAttackIV = 30, - .spDefenseIV = 31, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x10001, .nickname = _("UNOWN"), @@ -2921,11 +2921,11 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .spAttackEV = 255, .otId = TRAINER_HILL_OTID, .hpIV = 30, - .attackIV = 31, + .attackIV = MAX_PER_STAT_IVS, .defenseIV = 30, .speedIV = 30, .spAttackIV = 30, - .spDefenseIV = 31, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x302, .nickname = _("UNOWN"), @@ -2941,10 +2941,10 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .hpEV = 255, .attackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, + .hpIV = MAX_PER_STAT_IVS, .attackIV = 30, - .defenseIV = 31, - .speedIV = 31, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, .spAttackIV = 30, .spDefenseIV = 30, .abilityNum = 0, @@ -2962,12 +2962,12 @@ static const struct TrHillFloor sDataTagVariety_Floors[] = { .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, .defenseIV = 30, .speedIV = 30, - .spAttackIV = 31, - .spDefenseIV = 31, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x301, .nickname = _("UNOWN"), @@ -3820,12 +3820,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x32, .nickname = _("SMOOCHUM"), @@ -3842,12 +3842,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xC8, .nickname = _("AZURILL"), @@ -3864,12 +3864,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x0, .nickname = _("ELEKID"), @@ -3886,12 +3886,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x0, .nickname = _("CLEFFA"), @@ -3908,12 +3908,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x84, .nickname = _("WYNAUT"), @@ -3930,12 +3930,12 @@ static const struct TrHillFloor sDataTagUnique_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("MAGBY"), @@ -4319,12 +4319,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .defenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x35, .nickname = _("SNORLAX"), @@ -4341,12 +4341,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("MILTANK"), @@ -4363,12 +4363,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spAttackEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x7F, .nickname = _("URSARING"), @@ -4385,12 +4385,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("SLAKING"), @@ -4407,12 +4407,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("KANGASKHAN"), @@ -4429,12 +4429,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("ZANGOOSE"), @@ -4464,12 +4464,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 110, .spAttackEV = 200, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xF, .nickname = _("SLOWKING"), @@ -4486,12 +4486,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x28, .nickname = _("ESPEON"), @@ -4508,12 +4508,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xF, .nickname = _("STARMIE"), @@ -4530,12 +4530,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("GENGAR"), @@ -4552,12 +4552,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("GARDEVOIR"), @@ -4574,12 +4574,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("ALAKAZAM"), @@ -4641,12 +4641,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("SWELLOW"), @@ -4663,12 +4663,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("MACHAMP"), @@ -4685,12 +4685,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("URSARING"), @@ -4707,12 +4707,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("KINGLER"), @@ -4729,12 +4729,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .defenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("TYRANITAR"), @@ -4751,12 +4751,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x80, .nickname = _("DRAGONITE"), @@ -4786,12 +4786,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xA, .nickname = _("JOLTEON"), @@ -4808,12 +4808,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xA, .nickname = _("ALAKAZAM"), @@ -4830,12 +4830,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xA, .nickname = _("STARMIE"), @@ -4852,12 +4852,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x82, .nickname = _("DUSCLOPS"), @@ -4874,12 +4874,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xD2, .nickname = _("NINETALES"), @@ -4896,12 +4896,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x85, .nickname = _("BANETTE"), @@ -4963,12 +4963,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x94, .nickname = _("WOBBUFFET"), @@ -4985,12 +4985,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x85, .nickname = _("EXPLOUD"), @@ -5007,12 +5007,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x0, .nickname = _("CROBAT"), @@ -5029,12 +5029,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 252, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xD, .nickname = _("DUGTRIO"), @@ -5051,12 +5051,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 252, .spAttackEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x5, .nickname = _("ELECTRODE"), @@ -5073,12 +5073,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spDefenseEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x14, .nickname = _("GENGAR"), @@ -5108,12 +5108,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 130, .spDefenseEV = 130, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x82, .nickname = _("LAPRAS"), @@ -5130,12 +5130,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 6, .speedEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x8A, .nickname = _("ABSOL"), @@ -5152,12 +5152,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .spAttackEV = 6, .spDefenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x0, .nickname = _("ALTARIA"), @@ -5174,12 +5174,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 252, .spAttackEV = 6, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x14, .nickname = _("DEWGONG"), @@ -5196,12 +5196,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .spAttackEV = 6, .spDefenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0x14, .nickname = _("POLITOED"), @@ -5218,12 +5218,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 6, .spDefenseEV = 252, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0x17, .nickname = _("MAROWAK"), @@ -5285,12 +5285,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 200, .spDefenseEV = 200, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("FORRETRESS"), @@ -5306,12 +5306,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 1, .personality = 0xC, .nickname = _("ELECTRODE"), @@ -5327,12 +5327,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x7F, .nickname = _("EXEGGUTOR"), @@ -5349,12 +5349,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 200, .spDefenseEV = 200, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x93, .nickname = _("DUSCLOPS"), @@ -5370,12 +5370,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0xF, .nickname = _("NINETALES"), @@ -5391,12 +5391,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .hpEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x96, .nickname = _("BANETTE"), @@ -5425,12 +5425,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x95, .nickname = _("SALAMENCE"), @@ -5446,12 +5446,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .speedEV = 255, .spAttackEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x8C, .nickname = _("GENGAR"), @@ -5467,12 +5467,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("GYARADOS"), @@ -5488,12 +5488,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .attackEV = 255, .speedEV = 255, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x3, .nickname = _("GENGAR"), @@ -5510,12 +5510,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 200, .spDefenseEV = 200, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x14, .nickname = _("DUSCLOPS"), @@ -5532,12 +5532,12 @@ static const struct TrHillFloor sDataTagExpert_Floors[] = { .defenseEV = 180, .spDefenseEV = 150, .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, + .hpIV = MAX_PER_STAT_IVS, + .attackIV = MAX_PER_STAT_IVS, + .defenseIV = MAX_PER_STAT_IVS, + .speedIV = MAX_PER_STAT_IVS, + .spAttackIV = MAX_PER_STAT_IVS, + .spDefenseIV = MAX_PER_STAT_IVS, .abilityNum = 0, .personality = 0x85, .nickname = _("MISDREAVUS"), diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 008d7d7845..f78fa2c8c7 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -23,7 +23,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_KARATE_CHOP] = @@ -36,7 +36,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DOUBLE_SLAP] = @@ -49,7 +49,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COMET_PUNCH] = @@ -62,7 +62,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MEGA_PUNCH] = @@ -75,7 +75,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_PAY_DAY] = @@ -88,7 +88,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FIRE_PUNCH] = @@ -140,7 +140,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_VICE_GRIP] = @@ -153,7 +153,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_GUILLOTINE] = @@ -179,7 +179,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWORDS_DANCE] = @@ -205,7 +205,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_GUST] = @@ -218,7 +218,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_WING_ATTACK] = @@ -231,7 +231,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_WHIRLWIND] = @@ -257,7 +257,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BIND] = @@ -270,7 +270,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SLAM] = @@ -283,7 +283,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_VINE_WHIP] = @@ -296,7 +296,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STOMP] = @@ -322,7 +322,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MEGA_KICK] = @@ -335,7 +335,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_JUMP_KICK] = @@ -348,7 +348,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ROLLING_KICK] = @@ -361,7 +361,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SAND_ATTACK] = @@ -374,7 +374,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_HEADBUTT] = @@ -400,7 +400,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FURY_ATTACK] = @@ -413,7 +413,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_HORN_DRILL] = @@ -439,7 +439,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BODY_SLAM] = @@ -465,7 +465,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TAKE_DOWN] = @@ -478,7 +478,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_THRASH] = @@ -491,7 +491,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DOUBLE_EDGE] = @@ -504,7 +504,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TAIL_WHIP] = @@ -517,7 +517,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_POISON_STING] = @@ -556,7 +556,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LEER] = @@ -569,7 +569,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_BITE] = @@ -595,7 +595,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_ROAR] = @@ -621,7 +621,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SUPERSONIC] = @@ -634,7 +634,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SONIC_BOOM] = @@ -647,7 +647,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DISABLE] = @@ -725,7 +725,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_HYDRO_PUMP] = @@ -738,7 +738,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SURF] = @@ -751,7 +751,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ICE_BEAM] = @@ -829,7 +829,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_PECK] = @@ -842,7 +842,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DRILL_PECK] = @@ -855,7 +855,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SUBMISSION] = @@ -868,7 +868,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LOW_KICK] = @@ -881,7 +881,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COUNTER] = @@ -907,7 +907,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STRENGTH] = @@ -920,7 +920,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ABSORB] = @@ -959,7 +959,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_GROWTH] = @@ -985,7 +985,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SOLAR_BEAM] = @@ -998,7 +998,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_POISON_POWDER] = @@ -1011,7 +1011,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_STUN_SPORE] = @@ -1024,7 +1024,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SLEEP_POWDER] = @@ -1037,7 +1037,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_PETAL_DANCE] = @@ -1050,7 +1050,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STRING_SHOT] = @@ -1063,7 +1063,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_DRAGON_RAGE] = @@ -1076,7 +1076,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FIRE_SPIN] = @@ -1089,7 +1089,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_THUNDER_SHOCK] = @@ -1128,7 +1128,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_THUNDER] = @@ -1154,7 +1154,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_EARTHQUAKE] = @@ -1167,7 +1167,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FISSURE] = @@ -1193,7 +1193,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TOXIC] = @@ -1206,7 +1206,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_CONFUSION] = @@ -1245,7 +1245,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_MEDITATE] = @@ -1284,7 +1284,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_RAGE] = @@ -1297,7 +1297,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TELEPORT] = @@ -1323,7 +1323,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MIMIC] = @@ -1349,7 +1349,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_DOUBLE_TEAM] = @@ -1414,7 +1414,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_CONFUSE_RAY] = @@ -1427,7 +1427,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_WITHDRAW] = @@ -1531,7 +1531,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_USER, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_METRONOME] = @@ -1570,7 +1570,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_EGG_BOMB] = @@ -1583,7 +1583,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LICK] = @@ -1661,7 +1661,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CLAMP] = @@ -1674,7 +1674,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWIFT] = @@ -1687,7 +1687,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SKULL_BASH] = @@ -1700,7 +1700,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SPIKE_CANNON] = @@ -1713,7 +1713,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CONSTRICT] = @@ -1778,7 +1778,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_GLARE] = @@ -1791,7 +1791,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_DREAM_EATER] = @@ -1817,7 +1817,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_BARRAGE] = @@ -1830,7 +1830,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LEECH_LIFE] = @@ -1856,7 +1856,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SKY_ATTACK] = @@ -1869,7 +1869,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TRANSFORM] = @@ -1921,7 +1921,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_FLASH] = @@ -1934,7 +1934,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_PSYWAVE] = @@ -1947,7 +1947,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SPLASH] = @@ -1986,7 +1986,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_EXPLOSION] = @@ -1999,7 +1999,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FURY_SWIPES] = @@ -2012,7 +2012,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BONEMERANG] = @@ -2025,7 +2025,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_REST] = @@ -2129,7 +2129,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SUBSTITUTE] = @@ -2155,7 +2155,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SKETCH] = @@ -2181,7 +2181,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_THIEF] = @@ -2207,7 +2207,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_MIND_READER] = @@ -2259,7 +2259,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CURSE] = @@ -2285,7 +2285,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CONVERSION_2] = @@ -2311,7 +2311,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COTTON_SPORE] = @@ -2324,7 +2324,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_REVERSAL] = @@ -2337,7 +2337,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SPITE] = @@ -2389,7 +2389,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SCARY_FACE] = @@ -2402,7 +2402,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_FAINT_ATTACK] = @@ -2415,7 +2415,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWEET_KISS] = @@ -2428,7 +2428,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_BELLY_DRUM] = @@ -2584,7 +2584,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_LOCK_ON] = @@ -2610,7 +2610,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SANDSTORM] = @@ -2662,7 +2662,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_ROLLOUT] = @@ -2675,7 +2675,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FALSE_SWIPE] = @@ -2688,7 +2688,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWAGGER] = @@ -2701,7 +2701,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_MILK_DRINK] = @@ -2740,7 +2740,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STEEL_WING] = @@ -2753,7 +2753,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MEAN_LOOK] = @@ -2766,7 +2766,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_ATTRACT] = @@ -2779,7 +2779,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_SLEEP_TALK] = @@ -2818,7 +2818,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_PRESENT] = @@ -2844,7 +2844,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SAFEGUARD] = @@ -2896,7 +2896,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DYNAMIC_PUNCH] = @@ -2922,7 +2922,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DRAGON_BREATH] = @@ -2935,7 +2935,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BATON_PASS] = @@ -2987,7 +2987,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWEET_SCENT] = @@ -3000,7 +3000,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_IRON_TAIL] = @@ -3039,7 +3039,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = -1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MORNING_SUN] = @@ -3091,7 +3091,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CROSS_CHOP] = @@ -3104,7 +3104,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_TWISTER] = @@ -3117,7 +3117,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_RAIN_DANCE] = @@ -3195,7 +3195,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 1, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ANCIENT_POWER] = @@ -3260,7 +3260,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BEAT_UP] = @@ -3273,7 +3273,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FAKE_OUT] = @@ -3299,7 +3299,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_RANDOM, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_STOCKPILE] = @@ -3325,7 +3325,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SWALLOW] = @@ -3390,7 +3390,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_WILL_O_WISP] = @@ -3403,7 +3403,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_MEMENTO] = @@ -3637,7 +3637,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = -4, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BRICK_BREAK] = @@ -3650,7 +3650,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_YAWN] = @@ -3663,7 +3663,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_KNOCK_OFF] = @@ -3689,7 +3689,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ERUPTION] = @@ -3702,7 +3702,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SKILL_SWAP] = @@ -3793,7 +3793,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ARM_THRUST] = @@ -3806,7 +3806,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_CAMOUFLAGE] = @@ -3871,7 +3871,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_TEETER_DANCE] = @@ -3923,7 +3923,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_NEEDLE_ARM] = @@ -4001,7 +4001,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_HYDRO_CANNON] = @@ -4014,7 +4014,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_METEOR_MASH] = @@ -4027,7 +4027,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ASTONISH] = @@ -4053,7 +4053,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_AROMATHERAPY] = @@ -4079,7 +4079,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_AIR_CUTTER] = @@ -4092,7 +4092,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_OVERHEAT] = @@ -4105,7 +4105,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ODOR_SLEUTH] = @@ -4144,7 +4144,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_METAL_SOUND] = @@ -4157,7 +4157,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_GRASS_WHISTLE] = @@ -4170,7 +4170,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_TICKLE] = @@ -4183,7 +4183,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COSMIC_POWER] = @@ -4222,7 +4222,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SHADOW_PUNCH] = @@ -4235,7 +4235,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_EXTRASENSORY] = @@ -4261,7 +4261,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SAND_TOMB] = @@ -4274,7 +4274,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SHEER_COLD] = @@ -4300,7 +4300,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_BOTH, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BULLET_SEED] = @@ -4313,7 +4313,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_AERIAL_ACE] = @@ -4326,7 +4326,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_ICICLE_SPEAR] = @@ -4339,7 +4339,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_IRON_DEFENSE] = @@ -4365,7 +4365,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, }, [MOVE_HOWL] = @@ -4391,7 +4391,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_FRENZY_PLANT] = @@ -4404,7 +4404,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_BULK_UP] = @@ -4430,7 +4430,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 30, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MUD_SHOT] = @@ -4443,7 +4443,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_POISON_TAIL] = @@ -4456,7 +4456,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_COVET] = @@ -4482,7 +4482,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_MAGICAL_LEAF] = @@ -4495,7 +4495,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_WATER_SPORT] = @@ -4534,7 +4534,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DRAGON_DANCE] = @@ -4560,7 +4560,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_SHOCK_WAVE] = @@ -4573,7 +4573,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 0, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_WATER_PULSE] = @@ -4586,7 +4586,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, [MOVE_DOOM_DESIRE] = @@ -4612,6 +4612,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, - .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, }, }; diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 6de931ef20..127457bbec 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -1,7 +1,6 @@ #include "global.h" #include "contest.h" -#include "constants/species.h" #define CONTEST_OPPONENT_JIMMY 0 #define CONTEST_OPPONENT_EDITH 1 diff --git a/src/data/decoration/header.h b/src/data/decoration/header.h index 55458c7a3f..c574988281 100644 --- a/src/data/decoration/header.h +++ b/src/data/decoration/header.h @@ -1,1091 +1,1454 @@ -const struct Decoration gDecorations[] = { +const struct Decoration gDecorations[] = +{ + [DECOR_NONE] = { - DECOR_NONE, - _("SMALL DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_DESK, - 0, - DecorDesc_SMALL_DESK, - DecorGfx_SMALL_DESK - }, { - DECOR_SMALL_DESK, - _("SMALL DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_DESK, - 3000, - DecorDesc_SMALL_DESK, - DecorGfx_SMALL_DESK - }, { - DECOR_POKEMON_DESK, - _("POKéMON DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_DESK, - 3000, - DecorDesc_POKEMON_DESK, - DecorGfx_POKEMON_DESK - }, { - DECOR_HEAVY_DESK, - _("HEAVY DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x2, - DECORCAT_DESK, - 6000, - DecorDesc_HEAVY_DESK, - DecorGfx_HEAVY_DESK - }, { - DECOR_RAGGED_DESK, - _("RAGGED DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x2, - DECORCAT_DESK, - 6000, - DecorDesc_RAGGED_DESK, - DecorGfx_RAGGED_DESK - }, { - DECOR_COMFORT_DESK, - _("COMFORT DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x2, - DECORCAT_DESK, - 6000, - DecorDesc_COMFORT_DESK, - DecorGfx_COMFORT_DESK - }, { - DECOR_PRETTY_DESK, - _("PRETTY DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x3, - DECORCAT_DESK, - 9000, - DecorDesc_PRETTY_DESK, - DecorGfx_PRETTY_DESK - }, { - DECOR_BRICK_DESK, - _("BRICK DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x3, - DECORCAT_DESK, - 9000, - DecorDesc_BRICK_DESK, - DecorGfx_BRICK_DESK - }, { - DECOR_CAMP_DESK, - _("CAMP DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x3, - DECORCAT_DESK, - 9000, - DecorDesc_CAMP_DESK, - DecorGfx_CAMP_DESK - }, { - DECOR_HARD_DESK, - _("HARD DESK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_3x3, - DECORCAT_DESK, - 9000, - DecorDesc_HARD_DESK, - DecorGfx_HARD_DESK - }, { - DECOR_SMALL_CHAIR, - _("SMALL CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_SMALL_CHAIR, - DecorGfx_SMALL_CHAIR - }, { - DECOR_POKEMON_CHAIR, - _("POKéMON CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_POKEMON_CHAIR, - DecorGfx_POKEMON_CHAIR - }, { - DECOR_HEAVY_CHAIR, - _("HEAVY CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_HEAVY_CHAIR, - DecorGfx_HEAVY_CHAIR - }, { - DECOR_PRETTY_CHAIR, - _("PRETTY CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_PRETTY_CHAIR, - DecorGfx_PRETTY_CHAIR - }, { - DECOR_COMFORT_CHAIR, - _("COMFORT CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_COMFORT_CHAIR, - DecorGfx_COMFORT_CHAIR - }, { - DECOR_RAGGED_CHAIR, - _("RAGGED CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_RAGGED_CHAIR, - DecorGfx_RAGGED_CHAIR - }, { - DECOR_BRICK_CHAIR, - _("BRICK CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_BRICK_CHAIR, - DecorGfx_BRICK_CHAIR - }, { - DECOR_CAMP_CHAIR, - _("CAMP CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_CAMP_CHAIR, - DecorGfx_CAMP_CHAIR - }, { - DECOR_HARD_CHAIR, - _("HARD CHAIR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_CHAIR, - 2000, - DecorDesc_HARD_CHAIR, - DecorGfx_HARD_CHAIR - }, { - DECOR_RED_PLANT, - _("RED PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_PLANT, - 3000, - DecorDesc_RED_PLANT, - DecorGfx_RED_PLANT - }, { - DECOR_TROPICAL_PLANT, - _("TROPICAL PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_PLANT, - 3000, - DecorDesc_TROPICAL_PLANT, - DecorGfx_TROPICAL_PLANT - }, { - DECOR_PRETTY_FLOWERS, - _("PRETTY FLOWERS"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_PLANT, - 3000, - DecorDesc_PRETTY_FLOWERS, - DecorGfx_PRETTY_FLOWERS - }, { - DECOR_COLORFUL_PLANT, - _("COLORFUL PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_2x2, - DECORCAT_PLANT, - 5000, - DecorDesc_COLORFUL_PLANT, - DecorGfx_COLORFUL_PLANT - }, { - DECOR_BIG_PLANT, - _("BIG PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_2x2, - DECORCAT_PLANT, - 5000, - DecorDesc_BIG_PLANT, - DecorGfx_BIG_PLANT - }, { - DECOR_GORGEOUS_PLANT, - _("GORGEOUS PLANT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_2x2, - DECORCAT_PLANT, - 5000, - DecorDesc_GORGEOUS_PLANT, - DecorGfx_GORGEOUS_PLANT - }, { - DECOR_RED_BRICK, - _("RED BRICK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 500, - DecorDesc_RED_BRICK, - DecorGfx_RED_BRICK - }, { - DECOR_YELLOW_BRICK, - _("YELLOW BRICK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 500, - DecorDesc_YELLOW_BRICK, - DecorGfx_YELLOW_BRICK - }, { - DECOR_BLUE_BRICK, - _("BLUE BRICK"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 500, - DecorDesc_BLUE_BRICK, - DecorGfx_BLUE_BRICK - }, { - DECOR_RED_BALLOON, - _("RED BALLOON"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_RED_BALLOON, - DecorGfx_RED_BALLOON - }, { - DECOR_BLUE_BALLOON, - _("BLUE BALLOON"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_BLUE_BALLOON, - DecorGfx_BLUE_BALLOON - }, { - DECOR_YELLOW_BALLOON, - _("YELLOW BALLOON"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_YELLOW_BALLOON, - DecorGfx_YELLOW_BALLOON - }, { - DECOR_RED_TENT, - _("RED TENT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_ORNAMENT, - 10000, - DecorDesc_RED_TENT, - DecorGfx_RED_TENT - }, { - DECOR_BLUE_TENT, - _("BLUE TENT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_ORNAMENT, - 10000, - DecorDesc_BLUE_TENT, - DecorGfx_BLUE_TENT - }, { - DECOR_SOLID_BOARD, - _("SOLID BOARD"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 3000, - DecorDesc_SOLID_BOARD, - DecorGfx_SOLID_BOARD - }, { - DECOR_SLIDE, - _("SLIDE"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_2x4, - DECORCAT_ORNAMENT, - 8000, - DecorDesc_SLIDE, - DecorGfx_SLIDE - }, { - DECOR_FENCE_LENGTH, - _("FENCE LENGTH"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_FENCE_LENGTH, - DecorGfx_FENCE_LENGTH - }, { - DECOR_FENCE_WIDTH, - _("FENCE WIDTH"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 500, - DecorDesc_FENCE_WIDTH, - DecorGfx_FENCE_WIDTH - }, { - DECOR_TIRE, - _("TIRE"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_2x2, - DECORCAT_ORNAMENT, - 800, - DecorDesc_TIRE, - DecorGfx_TIRE - }, { - DECOR_STAND, - _("STAND"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_4x2, - DECORCAT_ORNAMENT, - 7000, - DecorDesc_STAND, - DecorGfx_STAND - }, { - DECOR_MUD_BALL, - _("MUD BALL"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 200, - DecorDesc_MUD_BALL, - DecorGfx_MUD_BALL - }, { - DECOR_BREAKABLE_DOOR, - _("BREAKABLE DOOR"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 3000, - DecorDesc_BREAKABLE_DOOR, - DecorGfx_BREAKABLE_DOOR - }, { - DECOR_SAND_ORNAMENT, - _("SAND ORNAMENT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 3000, - DecorDesc_SAND_ORNAMENT, - DecorGfx_SAND_ORNAMENT - }, { - DECOR_SILVER_SHIELD, - _("SILVER SHIELD"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 0, - DecorDesc_SILVER_SHIELD, - DecorGfx_SILVER_SHIELD - }, { - DECOR_GOLD_SHIELD, - _("GOLD SHIELD"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 0, - DecorDesc_GOLD_SHIELD, - DecorGfx_GOLD_SHIELD - }, { - DECOR_GLASS_ORNAMENT, - _("GLASS ORNAMENT"), - DECORPERM_BEHIND_FLOOR, - DECORSHAPE_1x2, - DECORCAT_ORNAMENT, - 0, - DecorDesc_GLASS_ORNAMENT, - DecorGfx_GLASS_ORNAMENT - }, { - DECOR_TV, - _("TV"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 3000, - DecorDesc_TV, - DecorGfx_TV - }, { - DECOR_ROUND_TV, - _("ROUND TV"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 4000, - DecorDesc_ROUND_TV, - DecorGfx_ROUND_TV - }, { - DECOR_CUTE_TV, - _("CUTE TV"), - DECORPERM_SOLID_FLOOR, - DECORSHAPE_1x1, - DECORCAT_ORNAMENT, - 4000, - DecorDesc_CUTE_TV, - DecorGfx_CUTE_TV - }, { - DECOR_GLITTER_MAT, - _("GLITTER MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 2000, - DecorDesc_GLITTER_MAT, - DecorGfx_GLITTER_MAT - }, { - DECOR_JUMP_MAT, - _("JUMP MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 2000, - DecorDesc_JUMP_MAT, - DecorGfx_JUMP_MAT - }, { - DECOR_SPIN_MAT, - _("SPIN MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 2000, - DecorDesc_SPIN_MAT, - DecorGfx_SPIN_MAT - }, { - DECOR_C_LOW_NOTE_MAT, - _("C Low NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_C_LOW_NOTE_MAT, - DecorGfx_C_LOW_NOTE_MAT - }, { - DECOR_D_NOTE_MAT, - _("D NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_D_NOTE_MAT, - DecorGfx_D_NOTE_MAT - }, { - DECOR_E_NOTE_MAT, - _("E NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_E_NOTE_MAT, - DecorGfx_E_NOTE_MAT - }, { - DECOR_F_NOTE_MAT, - _("F NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_F_NOTE_MAT, - DecorGfx_F_NOTE_MAT - }, { - DECOR_G_NOTE_MAT, - _("G NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_G_NOTE_MAT, - DecorGfx_G_NOTE_MAT - }, { - DECOR_A_NOTE_MAT, - _("A NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_A_NOTE_MAT, - DecorGfx_A_NOTE_MAT - }, { - DECOR_B_NOTE_MAT, - _("B NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_B_NOTE_MAT, - DecorGfx_B_NOTE_MAT - }, { - DECOR_C_HIGH_NOTE_MAT, - _("C High NOTE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_1x1, - DECORCAT_MAT, - 500, - DecorDesc_C_HIGH_NOTE_MAT, - DecorGfx_C_HIGH_NOTE_MAT - }, { - DECOR_SURF_MAT, - _("SURF MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_SURF_MAT, - DecorGfx_SURF_MAT - }, { - DECOR_THUNDER_MAT, - _("THUNDER MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_THUNDER_MAT, - DecorGfx_THUNDER_MAT - }, { - DECOR_FIRE_BLAST_MAT, - _("FIRE BLAST MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_FIRE_BLAST_MAT, - DecorGfx_FIRE_BLAST_MAT - }, { - DECOR_POWDER_SNOW_MAT, - _("POWDER SNOW MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_POWDER_SNOW_MAT, - DecorGfx_POWDER_SNOW_MAT - }, { - DECOR_ATTRACT_MAT, - _("ATTRACT MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_ATTRACT_MAT, - DecorGfx_ATTRACT_MAT - }, { - DECOR_FISSURE_MAT, - _("FISSURE MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_FISSURE_MAT, - DecorGfx_FISSURE_MAT - }, { - DECOR_SPIKES_MAT, - _("SPIKES MAT"), - DECORPERM_PASS_FLOOR, - DECORSHAPE_3x3, - DECORCAT_MAT, - 4000, - DecorDesc_SPIKES_MAT, - DecorGfx_SPIKES_MAT - }, { - DECOR_BALL_POSTER, - _("BALL POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_BALL_POSTER, - DecorGfx_BALL_POSTER - }, { - DECOR_GREEN_POSTER, - _("GREEN POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_GREEN_POSTER, - DecorGfx_GREEN_POSTER - }, { - DECOR_RED_POSTER, - _("RED POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_RED_POSTER, - DecorGfx_RED_POSTER - }, { - DECOR_BLUE_POSTER, - _("BLUE POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_BLUE_POSTER, - DecorGfx_BLUE_POSTER - }, { - DECOR_CUTE_POSTER, - _("CUTE POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_1x1, - DECORCAT_POSTER, - 1000, - DecorDesc_CUTE_POSTER, - DecorGfx_CUTE_POSTER - }, { - DECOR_PIKA_POSTER, - _("PIKA POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_PIKA_POSTER, - DecorGfx_PIKA_POSTER - }, { - DECOR_LONG_POSTER, - _("LONG POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_LONG_POSTER, - DecorGfx_LONG_POSTER - }, { - DECOR_SEA_POSTER, - _("SEA POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_SEA_POSTER, - DecorGfx_SEA_POSTER - }, { - DECOR_SKY_POSTER, - _("SKY POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_SKY_POSTER, - DecorGfx_SKY_POSTER - }, { - DECOR_KISS_POSTER, - _("KISS POSTER"), - DECORPERM_NA_WALL, - DECORSHAPE_2x1, - DECORCAT_POSTER, - 1500, - DecorDesc_KISS_POSTER, - DecorGfx_KISS_POSTER - }, { - DECOR_PICHU_DOLL, - _("PICHU DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_PICHU_DOLL, - DecorGfx_PICHU_DOLL - }, { - DECOR_PIKACHU_DOLL, - _("PIKACHU DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_PIKACHU_DOLL, - DecorGfx_PIKACHU_DOLL - }, { - DECOR_MARILL_DOLL, - _("MARILL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_MARILL_DOLL, - DecorGfx_MARILL_DOLL - }, { - DECOR_TOGEPI_DOLL, - _("TOGEPI DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_TOGEPI_DOLL, - DecorGfx_TOGEPI_DOLL - }, { - DECOR_CYNDAQUIL_DOLL, - _("CYNDAQUIL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_CYNDAQUIL_DOLL, - DecorGfx_CYNDAQUIL_DOLL - }, { - DECOR_CHIKORITA_DOLL, - _("CHIKORITA DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_CHIKORITA_DOLL, - DecorGfx_CHIKORITA_DOLL - }, { - DECOR_TOTODILE_DOLL, - _("TOTODILE DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_TOTODILE_DOLL, - DecorGfx_TOTODILE_DOLL - }, { - DECOR_JIGGLYPUFF_DOLL, - _("JIGGLYPUFF DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_JIGGLYPUFF_DOLL, - DecorGfx_JIGGLYPUFF_DOLL - }, { - DECOR_MEOWTH_DOLL, - _("MEOWTH DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_MEOWTH_DOLL, - DecorGfx_MEOWTH_DOLL - }, { - DECOR_CLEFAIRY_DOLL, - _("CLEFAIRY DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_CLEFAIRY_DOLL, - DecorGfx_CLEFAIRY_DOLL - }, { - DECOR_DITTO_DOLL, - _("DITTO DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_DITTO_DOLL, - DecorGfx_DITTO_DOLL - }, { - DECOR_SMOOCHUM_DOLL, - _("SMOOCHUM DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_SMOOCHUM_DOLL, - DecorGfx_SMOOCHUM_DOLL - }, { - DECOR_TREECKO_DOLL, - _("TREECKO DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_TREECKO_DOLL, - DecorGfx_TREECKO_DOLL - }, { - DECOR_TORCHIC_DOLL, - _("TORCHIC DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_TORCHIC_DOLL, - DecorGfx_TORCHIC_DOLL - }, { - DECOR_MUDKIP_DOLL, - _("MUDKIP DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_MUDKIP_DOLL, - DecorGfx_MUDKIP_DOLL - }, { - DECOR_DUSKULL_DOLL, - _("DUSKULL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_DUSKULL_DOLL, - DecorGfx_DUSKULL_DOLL - }, { - DECOR_WYNAUT_DOLL, - _("WYNAUT DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_WYNAUT_DOLL, - DecorGfx_WYNAUT_DOLL - }, { - DECOR_BALTOY_DOLL, - _("BALTOY DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_BALTOY_DOLL, - DecorGfx_BALTOY_DOLL - }, { - DECOR_KECLEON_DOLL, - _("KECLEON DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_KECLEON_DOLL, - DecorGfx_KECLEON_DOLL - }, { - DECOR_AZURILL_DOLL, - _("AZURILL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_AZURILL_DOLL, - DecorGfx_AZURILL_DOLL - }, { - DECOR_SKITTY_DOLL, - _("SKITTY DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_SKITTY_DOLL, - DecorGfx_SKITTY_DOLL - }, { - DECOR_SWABLU_DOLL, - _("SWABLU DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_SWABLU_DOLL, - DecorGfx_SWABLU_DOLL - }, { - DECOR_GULPIN_DOLL, - _("GULPIN DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_GULPIN_DOLL, - DecorGfx_GULPIN_DOLL - }, { - DECOR_LOTAD_DOLL, - _("LOTAD DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_LOTAD_DOLL, - DecorGfx_LOTAD_DOLL - }, { - DECOR_SEEDOT_DOLL, - _("SEEDOT DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_DOLL, - 3000, - DecorDesc_SEEDOT_DOLL, - DecorGfx_SEEDOT_DOLL - }, { - DECOR_PIKA_CUSHION, - _("PIKA CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_PIKA_CUSHION, - DecorGfx_PIKA_CUSHION - }, { - DECOR_ROUND_CUSHION, - _("ROUND CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_ROUND_CUSHION, - DecorGfx_ROUND_CUSHION - }, { - DECOR_KISS_CUSHION, - _("KISS CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_KISS_CUSHION, - DecorGfx_KISS_CUSHION - }, { - DECOR_ZIGZAG_CUSHION, - _("ZIGZAG CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_ZIGZAG_CUSHION, - DecorGfx_ZIGZAG_CUSHION - }, { - DECOR_SPIN_CUSHION, - _("SPIN CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_SPIN_CUSHION, - DecorGfx_SPIN_CUSHION - }, { - DECOR_DIAMOND_CUSHION, - _("DIAMOND CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_DIAMOND_CUSHION, - DecorGfx_DIAMOND_CUSHION - }, { - DECOR_BALL_CUSHION, - _("BALL CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_BALL_CUSHION, - DecorGfx_BALL_CUSHION - }, { - DECOR_GRASS_CUSHION, - _("GRASS CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_GRASS_CUSHION, - DecorGfx_GRASS_CUSHION - }, { - DECOR_FIRE_CUSHION, - _("FIRE CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_FIRE_CUSHION, - DecorGfx_FIRE_CUSHION - }, { - DECOR_WATER_CUSHION, - _("WATER CUSHION"), - DECORPERM_SPRITE, - DECORSHAPE_1x1, - DECORCAT_CUSHION, - 2000, - DecorDesc_WATER_CUSHION, - DecorGfx_WATER_CUSHION - }, { - DECOR_SNORLAX_DOLL, - _("SNORLAX DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_SNORLAX_DOLL, - DecorGfx_SNORLAX_DOLL - }, { - DECOR_RHYDON_DOLL, - _("RHYDON DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_RHYDON_DOLL, - DecorGfx_RHYDON_DOLL - }, { - DECOR_LAPRAS_DOLL, - _("LAPRAS DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_LAPRAS_DOLL, - DecorGfx_LAPRAS_DOLL - }, { - DECOR_VENUSAUR_DOLL, - _("VENUSAUR DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_VENUSAUR_DOLL, - DecorGfx_VENUSAUR_DOLL - }, { - DECOR_CHARIZARD_DOLL, - _("CHARIZARD DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_CHARIZARD_DOLL, - DecorGfx_CHARIZARD_DOLL - }, { - DECOR_BLASTOISE_DOLL, - _("BLASTOISE DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_BLASTOISE_DOLL, - DecorGfx_BLASTOISE_DOLL - }, { - DECOR_WAILMER_DOLL, - _("WAILMER DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_WAILMER_DOLL, - DecorGfx_WAILMER_DOLL - }, { - DECOR_REGIROCK_DOLL, - _("REGIROCK DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_REGIROCK_DOLL, - DecorGfx_REGIROCK_DOLL - }, { - DECOR_REGICE_DOLL, - _("REGICE DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_REGICE_DOLL, - DecorGfx_REGICE_DOLL - }, { - DECOR_REGISTEEL_DOLL, - _("REGISTEEL DOLL"), - DECORPERM_SPRITE, - DECORSHAPE_1x2, - DECORCAT_DOLL, - 10000, - DecorDesc_REGISTEEL_DOLL, - DecorGfx_REGISTEEL_DOLL} + .id = DECOR_NONE, + .name = _("SMALL DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DESK, + .price = 0, + .description = DecorDesc_SMALL_DESK, + .tiles = DecorGfx_SMALL_DESK, + }, + + [DECOR_SMALL_DESK] = + { + .id = DECOR_SMALL_DESK, + .name = _("SMALL DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DESK, + .price = 3000, + .description = DecorDesc_SMALL_DESK, + .tiles = DecorGfx_SMALL_DESK, + }, + + [DECOR_POKEMON_DESK] = + { + .id = DECOR_POKEMON_DESK, + .name = _("POKéMON DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DESK, + .price = 3000, + .description = DecorDesc_POKEMON_DESK, + .tiles = DecorGfx_POKEMON_DESK, + }, + + [DECOR_HEAVY_DESK] = + { + .id = DECOR_HEAVY_DESK, + .name = _("HEAVY DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x2, + .category = DECORCAT_DESK, + .price = 6000, + .description = DecorDesc_HEAVY_DESK, + .tiles = DecorGfx_HEAVY_DESK, + }, + + [DECOR_RAGGED_DESK] = + { + .id = DECOR_RAGGED_DESK, + .name = _("RAGGED DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x2, + .category = DECORCAT_DESK, + .price = 6000, + .description = DecorDesc_RAGGED_DESK, + .tiles = DecorGfx_RAGGED_DESK, + }, + + [DECOR_COMFORT_DESK] = + { + .id = DECOR_COMFORT_DESK, + .name = _("COMFORT DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x2, + .category = DECORCAT_DESK, + .price = 6000, + .description = DecorDesc_COMFORT_DESK, + .tiles = DecorGfx_COMFORT_DESK, + }, + + [DECOR_PRETTY_DESK] = + { + .id = DECOR_PRETTY_DESK, + .name = _("PRETTY DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_DESK, + .price = 9000, + .description = DecorDesc_PRETTY_DESK, + .tiles = DecorGfx_PRETTY_DESK, + }, + + [DECOR_BRICK_DESK] = + { + .id = DECOR_BRICK_DESK, + .name = _("BRICK DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_DESK, + .price = 9000, + .description = DecorDesc_BRICK_DESK, + .tiles = DecorGfx_BRICK_DESK, + }, + + [DECOR_CAMP_DESK] = + { + .id = DECOR_CAMP_DESK, + .name = _("CAMP DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_DESK, + .price = 9000, + .description = DecorDesc_CAMP_DESK, + .tiles = DecorGfx_CAMP_DESK, + }, + + [DECOR_HARD_DESK] = + { + .id = DECOR_HARD_DESK, + .name = _("HARD DESK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_DESK, + .price = 9000, + .description = DecorDesc_HARD_DESK, + .tiles = DecorGfx_HARD_DESK, + }, + + [DECOR_SMALL_CHAIR] = + { + .id = DECOR_SMALL_CHAIR, + .name = _("SMALL CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_SMALL_CHAIR, + .tiles = DecorGfx_SMALL_CHAIR, + }, + + [DECOR_POKEMON_CHAIR] = + { + .id = DECOR_POKEMON_CHAIR, + .name = _("POKéMON CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_POKEMON_CHAIR, + .tiles = DecorGfx_POKEMON_CHAIR, + }, + + [DECOR_HEAVY_CHAIR] = + { + .id = DECOR_HEAVY_CHAIR, + .name = _("HEAVY CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_HEAVY_CHAIR, + .tiles = DecorGfx_HEAVY_CHAIR, + }, + + [DECOR_PRETTY_CHAIR] = + { + .id = DECOR_PRETTY_CHAIR, + .name = _("PRETTY CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_PRETTY_CHAIR, + .tiles = DecorGfx_PRETTY_CHAIR, + }, + + [DECOR_COMFORT_CHAIR] = + { + .id = DECOR_COMFORT_CHAIR, + .name = _("COMFORT CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_COMFORT_CHAIR, + .tiles = DecorGfx_COMFORT_CHAIR, + }, + + [DECOR_RAGGED_CHAIR] = + { + .id = DECOR_RAGGED_CHAIR, + .name = _("RAGGED CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_RAGGED_CHAIR, + .tiles = DecorGfx_RAGGED_CHAIR, + }, + + [DECOR_BRICK_CHAIR] = + { + .id = DECOR_BRICK_CHAIR, + .name = _("BRICK CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_BRICK_CHAIR, + .tiles = DecorGfx_BRICK_CHAIR, + }, + + [DECOR_CAMP_CHAIR] = + { + .id = DECOR_CAMP_CHAIR, + .name = _("CAMP CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_CAMP_CHAIR, + .tiles = DecorGfx_CAMP_CHAIR, + }, + + [DECOR_HARD_CHAIR] = + { + .id = DECOR_HARD_CHAIR, + .name = _("HARD CHAIR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CHAIR, + .price = 2000, + .description = DecorDesc_HARD_CHAIR, + .tiles = DecorGfx_HARD_CHAIR, + }, + + [DECOR_RED_PLANT] = + { + .id = DECOR_RED_PLANT, + .name = _("RED PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_PLANT, + .price = 3000, + .description = DecorDesc_RED_PLANT, + .tiles = DecorGfx_RED_PLANT, + }, + + [DECOR_TROPICAL_PLANT] = + { + .id = DECOR_TROPICAL_PLANT, + .name = _("TROPICAL PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_PLANT, + .price = 3000, + .description = DecorDesc_TROPICAL_PLANT, + .tiles = DecorGfx_TROPICAL_PLANT, + }, + + [DECOR_PRETTY_FLOWERS] = + { + .id = DECOR_PRETTY_FLOWERS, + .name = _("PRETTY FLOWERS"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_PLANT, + .price = 3000, + .description = DecorDesc_PRETTY_FLOWERS, + .tiles = DecorGfx_PRETTY_FLOWERS, + }, + + [DECOR_COLORFUL_PLANT] = + { + .id = DECOR_COLORFUL_PLANT, + .name = _("COLORFUL PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_2x2, + .category = DECORCAT_PLANT, + .price = 5000, + .description = DecorDesc_COLORFUL_PLANT, + .tiles = DecorGfx_COLORFUL_PLANT, + }, + + [DECOR_BIG_PLANT] = + { + .id = DECOR_BIG_PLANT, + .name = _("BIG PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_2x2, + .category = DECORCAT_PLANT, + .price = 5000, + .description = DecorDesc_BIG_PLANT, + .tiles = DecorGfx_BIG_PLANT, + }, + + [DECOR_GORGEOUS_PLANT] = + { + .id = DECOR_GORGEOUS_PLANT, + .name = _("GORGEOUS PLANT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_2x2, + .category = DECORCAT_PLANT, + .price = 5000, + .description = DecorDesc_GORGEOUS_PLANT, + .tiles = DecorGfx_GORGEOUS_PLANT, + }, + + [DECOR_RED_BRICK] = + { + .id = DECOR_RED_BRICK, + .name = _("RED BRICK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_RED_BRICK, + .tiles = DecorGfx_RED_BRICK, + }, + + [DECOR_YELLOW_BRICK] = + { + .id = DECOR_YELLOW_BRICK, + .name = _("YELLOW BRICK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_YELLOW_BRICK, + .tiles = DecorGfx_YELLOW_BRICK, + }, + + [DECOR_BLUE_BRICK] = + { + .id = DECOR_BLUE_BRICK, + .name = _("BLUE BRICK"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_BLUE_BRICK, + .tiles = DecorGfx_BLUE_BRICK, + }, + + [DECOR_RED_BALLOON] = + { + .id = DECOR_RED_BALLOON, + .name = _("RED BALLOON"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_RED_BALLOON, + .tiles = DecorGfx_RED_BALLOON, + }, + + [DECOR_BLUE_BALLOON] = + { + .id = DECOR_BLUE_BALLOON, + .name = _("BLUE BALLOON"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_BLUE_BALLOON, + .tiles = DecorGfx_BLUE_BALLOON, + }, + + [DECOR_YELLOW_BALLOON] = + { + .id = DECOR_YELLOW_BALLOON, + .name = _("YELLOW BALLOON"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_YELLOW_BALLOON, + .tiles = DecorGfx_YELLOW_BALLOON, + }, + + [DECOR_RED_TENT] = + { + .id = DECOR_RED_TENT, + .name = _("RED TENT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_ORNAMENT, + .price = 10000, + .description = DecorDesc_RED_TENT, + .tiles = DecorGfx_RED_TENT, + }, + + [DECOR_BLUE_TENT] = + { + .id = DECOR_BLUE_TENT, + .name = _("BLUE TENT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_ORNAMENT, + .price = 10000, + .description = DecorDesc_BLUE_TENT, + .tiles = DecorGfx_BLUE_TENT, + }, + + [DECOR_SOLID_BOARD] = + { + .id = DECOR_SOLID_BOARD, + .name = _("SOLID BOARD"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 3000, + .description = DecorDesc_SOLID_BOARD, + .tiles = DecorGfx_SOLID_BOARD, + }, + + [DECOR_SLIDE] = + { + .id = DECOR_SLIDE, + .name = _("SLIDE"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_2x4, + .category = DECORCAT_ORNAMENT, + .price = 8000, + .description = DecorDesc_SLIDE, + .tiles = DecorGfx_SLIDE, + }, + + [DECOR_FENCE_LENGTH] = + { + .id = DECOR_FENCE_LENGTH, + .name = _("FENCE LENGTH"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_FENCE_LENGTH, + .tiles = DecorGfx_FENCE_LENGTH, + }, + + [DECOR_FENCE_WIDTH] = + { + .id = DECOR_FENCE_WIDTH, + .name = _("FENCE WIDTH"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 500, + .description = DecorDesc_FENCE_WIDTH, + .tiles = DecorGfx_FENCE_WIDTH, + }, + + [DECOR_TIRE] = + { + .id = DECOR_TIRE, + .name = _("TIRE"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_2x2, + .category = DECORCAT_ORNAMENT, + .price = 800, + .description = DecorDesc_TIRE, + .tiles = DecorGfx_TIRE, + }, + + [DECOR_STAND] = + { + .id = DECOR_STAND, + .name = _("STAND"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_4x2, + .category = DECORCAT_ORNAMENT, + .price = 7000, + .description = DecorDesc_STAND, + .tiles = DecorGfx_STAND, + }, + + [DECOR_MUD_BALL] = + { + .id = DECOR_MUD_BALL, + .name = _("MUD BALL"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 200, + .description = DecorDesc_MUD_BALL, + .tiles = DecorGfx_MUD_BALL, + }, + + [DECOR_BREAKABLE_DOOR] = + { + .id = DECOR_BREAKABLE_DOOR, + .name = _("BREAKABLE DOOR"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 3000, + .description = DecorDesc_BREAKABLE_DOOR, + .tiles = DecorGfx_BREAKABLE_DOOR, + }, + + [DECOR_SAND_ORNAMENT] = + { + .id = DECOR_SAND_ORNAMENT, + .name = _("SAND ORNAMENT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 3000, + .description = DecorDesc_SAND_ORNAMENT, + .tiles = DecorGfx_SAND_ORNAMENT, + }, + + [DECOR_SILVER_SHIELD] = + { + .id = DECOR_SILVER_SHIELD, + .name = _("SILVER SHIELD"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 0, + .description = DecorDesc_SILVER_SHIELD, + .tiles = DecorGfx_SILVER_SHIELD, + }, + + [DECOR_GOLD_SHIELD] = + { + .id = DECOR_GOLD_SHIELD, + .name = _("GOLD SHIELD"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 0, + .description = DecorDesc_GOLD_SHIELD, + .tiles = DecorGfx_GOLD_SHIELD, + }, + + [DECOR_GLASS_ORNAMENT] = + { + .id = DECOR_GLASS_ORNAMENT, + .name = _("GLASS ORNAMENT"), + .permission = DECORPERM_BEHIND_FLOOR, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_ORNAMENT, + .price = 0, + .description = DecorDesc_GLASS_ORNAMENT, + .tiles = DecorGfx_GLASS_ORNAMENT, + }, + + [DECOR_TV] = + { + .id = DECOR_TV, + .name = _("TV"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 3000, + .description = DecorDesc_TV, + .tiles = DecorGfx_TV, + }, + + [DECOR_ROUND_TV] = + { + .id = DECOR_ROUND_TV, + .name = _("ROUND TV"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 4000, + .description = DecorDesc_ROUND_TV, + .tiles = DecorGfx_ROUND_TV, + }, + + [DECOR_CUTE_TV] = + { + .id = DECOR_CUTE_TV, + .name = _("CUTE TV"), + .permission = DECORPERM_SOLID_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_ORNAMENT, + .price = 4000, + .description = DecorDesc_CUTE_TV, + .tiles = DecorGfx_CUTE_TV, + }, + + [DECOR_GLITTER_MAT] = + { + .id = DECOR_GLITTER_MAT, + .name = _("GLITTER MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 2000, + .description = DecorDesc_GLITTER_MAT, + .tiles = DecorGfx_GLITTER_MAT, + }, + + [DECOR_JUMP_MAT] = + { + .id = DECOR_JUMP_MAT, + .name = _("JUMP MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 2000, + .description = DecorDesc_JUMP_MAT, + .tiles = DecorGfx_JUMP_MAT, + }, + + [DECOR_SPIN_MAT] = + { + .id = DECOR_SPIN_MAT, + .name = _("SPIN MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 2000, + .description = DecorDesc_SPIN_MAT, + .tiles = DecorGfx_SPIN_MAT, + }, + + [DECOR_C_LOW_NOTE_MAT] = + { + .id = DECOR_C_LOW_NOTE_MAT, + .name = _("C Low NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_C_LOW_NOTE_MAT, + .tiles = DecorGfx_C_LOW_NOTE_MAT, + }, + + [DECOR_D_NOTE_MAT] = + { + .id = DECOR_D_NOTE_MAT, + .name = _("D NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_D_NOTE_MAT, + .tiles = DecorGfx_D_NOTE_MAT, + }, + + [DECOR_E_NOTE_MAT] = + { + .id = DECOR_E_NOTE_MAT, + .name = _("E NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_E_NOTE_MAT, + .tiles = DecorGfx_E_NOTE_MAT, + }, + + [DECOR_F_NOTE_MAT] = + { + .id = DECOR_F_NOTE_MAT, + .name = _("F NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_F_NOTE_MAT, + .tiles = DecorGfx_F_NOTE_MAT, + }, + + [DECOR_G_NOTE_MAT] = + { + .id = DECOR_G_NOTE_MAT, + .name = _("G NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_G_NOTE_MAT, + .tiles = DecorGfx_G_NOTE_MAT, + }, + + [DECOR_A_NOTE_MAT] = + { + .id = DECOR_A_NOTE_MAT, + .name = _("A NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_A_NOTE_MAT, + .tiles = DecorGfx_A_NOTE_MAT, + }, + + [DECOR_B_NOTE_MAT] = + { + .id = DECOR_B_NOTE_MAT, + .name = _("B NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_B_NOTE_MAT, + .tiles = DecorGfx_B_NOTE_MAT, + }, + + [DECOR_C_HIGH_NOTE_MAT] = + { + .id = DECOR_C_HIGH_NOTE_MAT, + .name = _("C High NOTE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_MAT, + .price = 500, + .description = DecorDesc_C_HIGH_NOTE_MAT, + .tiles = DecorGfx_C_HIGH_NOTE_MAT, + }, + + [DECOR_SURF_MAT] = + { + .id = DECOR_SURF_MAT, + .name = _("SURF MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_SURF_MAT, + .tiles = DecorGfx_SURF_MAT, + }, + + [DECOR_THUNDER_MAT] = + { + .id = DECOR_THUNDER_MAT, + .name = _("THUNDER MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_THUNDER_MAT, + .tiles = DecorGfx_THUNDER_MAT, + }, + + [DECOR_FIRE_BLAST_MAT] = + { + .id = DECOR_FIRE_BLAST_MAT, + .name = _("FIRE BLAST MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_FIRE_BLAST_MAT, + .tiles = DecorGfx_FIRE_BLAST_MAT, + }, + + [DECOR_POWDER_SNOW_MAT] = + { + .id = DECOR_POWDER_SNOW_MAT, + .name = _("POWDER SNOW MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_POWDER_SNOW_MAT, + .tiles = DecorGfx_POWDER_SNOW_MAT, + }, + + [DECOR_ATTRACT_MAT] = + { + .id = DECOR_ATTRACT_MAT, + .name = _("ATTRACT MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_ATTRACT_MAT, + .tiles = DecorGfx_ATTRACT_MAT, + }, + + [DECOR_FISSURE_MAT] = + { + .id = DECOR_FISSURE_MAT, + .name = _("FISSURE MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_FISSURE_MAT, + .tiles = DecorGfx_FISSURE_MAT, + }, + + [DECOR_SPIKES_MAT] = + { + .id = DECOR_SPIKES_MAT, + .name = _("SPIKES MAT"), + .permission = DECORPERM_PASS_FLOOR, + .shape = DECORSHAPE_3x3, + .category = DECORCAT_MAT, + .price = 4000, + .description = DecorDesc_SPIKES_MAT, + .tiles = DecorGfx_SPIKES_MAT, + }, + + [DECOR_BALL_POSTER] = + { + .id = DECOR_BALL_POSTER, + .name = _("BALL POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_BALL_POSTER, + .tiles = DecorGfx_BALL_POSTER, + }, + + [DECOR_GREEN_POSTER] = + { + .id = DECOR_GREEN_POSTER, + .name = _("GREEN POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_GREEN_POSTER, + .tiles = DecorGfx_GREEN_POSTER, + }, + + [DECOR_RED_POSTER] = + { + .id = DECOR_RED_POSTER, + .name = _("RED POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_RED_POSTER, + .tiles = DecorGfx_RED_POSTER, + }, + + [DECOR_BLUE_POSTER] = + { + .id = DECOR_BLUE_POSTER, + .name = _("BLUE POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_BLUE_POSTER, + .tiles = DecorGfx_BLUE_POSTER, + }, + + [DECOR_CUTE_POSTER] = + { + .id = DECOR_CUTE_POSTER, + .name = _("CUTE POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_POSTER, + .price = 1000, + .description = DecorDesc_CUTE_POSTER, + .tiles = DecorGfx_CUTE_POSTER, + }, + + [DECOR_PIKA_POSTER] = + { + .id = DECOR_PIKA_POSTER, + .name = _("PIKA POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_PIKA_POSTER, + .tiles = DecorGfx_PIKA_POSTER, + }, + + [DECOR_LONG_POSTER] = + { + .id = DECOR_LONG_POSTER, + .name = _("LONG POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_LONG_POSTER, + .tiles = DecorGfx_LONG_POSTER, + }, + + [DECOR_SEA_POSTER] = + { + .id = DECOR_SEA_POSTER, + .name = _("SEA POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_SEA_POSTER, + .tiles = DecorGfx_SEA_POSTER, + }, + + [DECOR_SKY_POSTER] = + { + .id = DECOR_SKY_POSTER, + .name = _("SKY POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_SKY_POSTER, + .tiles = DecorGfx_SKY_POSTER, + }, + + [DECOR_KISS_POSTER] = + { + .id = DECOR_KISS_POSTER, + .name = _("KISS POSTER"), + .permission = DECORPERM_NA_WALL, + .shape = DECORSHAPE_2x1, + .category = DECORCAT_POSTER, + .price = 1500, + .description = DecorDesc_KISS_POSTER, + .tiles = DecorGfx_KISS_POSTER, + }, + + [DECOR_PICHU_DOLL] = + { + .id = DECOR_PICHU_DOLL, + .name = _("PICHU DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_PICHU_DOLL, + .tiles = DecorGfx_PICHU_DOLL, + }, + + [DECOR_PIKACHU_DOLL] = + { + .id = DECOR_PIKACHU_DOLL, + .name = _("PIKACHU DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_PIKACHU_DOLL, + .tiles = DecorGfx_PIKACHU_DOLL, + }, + + [DECOR_MARILL_DOLL] = + { + .id = DECOR_MARILL_DOLL, + .name = _("MARILL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_MARILL_DOLL, + .tiles = DecorGfx_MARILL_DOLL, + }, + + [DECOR_TOGEPI_DOLL] = + { + .id = DECOR_TOGEPI_DOLL, + .name = _("TOGEPI DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_TOGEPI_DOLL, + .tiles = DecorGfx_TOGEPI_DOLL, + }, + + [DECOR_CYNDAQUIL_DOLL] = + { + .id = DECOR_CYNDAQUIL_DOLL, + .name = _("CYNDAQUIL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_CYNDAQUIL_DOLL, + .tiles = DecorGfx_CYNDAQUIL_DOLL, + }, + + [DECOR_CHIKORITA_DOLL] = + { + .id = DECOR_CHIKORITA_DOLL, + .name = _("CHIKORITA DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_CHIKORITA_DOLL, + .tiles = DecorGfx_CHIKORITA_DOLL, + }, + + [DECOR_TOTODILE_DOLL] = + { + .id = DECOR_TOTODILE_DOLL, + .name = _("TOTODILE DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_TOTODILE_DOLL, + .tiles = DecorGfx_TOTODILE_DOLL, + }, + + [DECOR_JIGGLYPUFF_DOLL] = + { + .id = DECOR_JIGGLYPUFF_DOLL, + .name = _("JIGGLYPUFF DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_JIGGLYPUFF_DOLL, + .tiles = DecorGfx_JIGGLYPUFF_DOLL, + }, + + [DECOR_MEOWTH_DOLL] = + { + .id = DECOR_MEOWTH_DOLL, + .name = _("MEOWTH DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_MEOWTH_DOLL, + .tiles = DecorGfx_MEOWTH_DOLL, + }, + + [DECOR_CLEFAIRY_DOLL] = + { + .id = DECOR_CLEFAIRY_DOLL, + .name = _("CLEFAIRY DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_CLEFAIRY_DOLL, + .tiles = DecorGfx_CLEFAIRY_DOLL, + }, + + [DECOR_DITTO_DOLL] = + { + .id = DECOR_DITTO_DOLL, + .name = _("DITTO DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_DITTO_DOLL, + .tiles = DecorGfx_DITTO_DOLL, + }, + + [DECOR_SMOOCHUM_DOLL] = + { + .id = DECOR_SMOOCHUM_DOLL, + .name = _("SMOOCHUM DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_SMOOCHUM_DOLL, + .tiles = DecorGfx_SMOOCHUM_DOLL, + }, + + [DECOR_TREECKO_DOLL] = + { + .id = DECOR_TREECKO_DOLL, + .name = _("TREECKO DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_TREECKO_DOLL, + .tiles = DecorGfx_TREECKO_DOLL, + }, + + [DECOR_TORCHIC_DOLL] = + { + .id = DECOR_TORCHIC_DOLL, + .name = _("TORCHIC DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_TORCHIC_DOLL, + .tiles = DecorGfx_TORCHIC_DOLL, + }, + + [DECOR_MUDKIP_DOLL] = + { + .id = DECOR_MUDKIP_DOLL, + .name = _("MUDKIP DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_MUDKIP_DOLL, + .tiles = DecorGfx_MUDKIP_DOLL, + }, + + [DECOR_DUSKULL_DOLL] = + { + .id = DECOR_DUSKULL_DOLL, + .name = _("DUSKULL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_DUSKULL_DOLL, + .tiles = DecorGfx_DUSKULL_DOLL, + }, + + [DECOR_WYNAUT_DOLL] = + { + .id = DECOR_WYNAUT_DOLL, + .name = _("WYNAUT DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_WYNAUT_DOLL, + .tiles = DecorGfx_WYNAUT_DOLL, + }, + + [DECOR_BALTOY_DOLL] = + { + .id = DECOR_BALTOY_DOLL, + .name = _("BALTOY DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_BALTOY_DOLL, + .tiles = DecorGfx_BALTOY_DOLL, + }, + + [DECOR_KECLEON_DOLL] = + { + .id = DECOR_KECLEON_DOLL, + .name = _("KECLEON DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_KECLEON_DOLL, + .tiles = DecorGfx_KECLEON_DOLL, + }, + + [DECOR_AZURILL_DOLL] = + { + .id = DECOR_AZURILL_DOLL, + .name = _("AZURILL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_AZURILL_DOLL, + .tiles = DecorGfx_AZURILL_DOLL, + }, + + [DECOR_SKITTY_DOLL] = + { + .id = DECOR_SKITTY_DOLL, + .name = _("SKITTY DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_SKITTY_DOLL, + .tiles = DecorGfx_SKITTY_DOLL, + }, + + [DECOR_SWABLU_DOLL] = + { + .id = DECOR_SWABLU_DOLL, + .name = _("SWABLU DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_SWABLU_DOLL, + .tiles = DecorGfx_SWABLU_DOLL, + }, + + [DECOR_GULPIN_DOLL] = + { + .id = DECOR_GULPIN_DOLL, + .name = _("GULPIN DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_GULPIN_DOLL, + .tiles = DecorGfx_GULPIN_DOLL, + }, + + [DECOR_LOTAD_DOLL] = + { + .id = DECOR_LOTAD_DOLL, + .name = _("LOTAD DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_LOTAD_DOLL, + .tiles = DecorGfx_LOTAD_DOLL, + }, + + [DECOR_SEEDOT_DOLL] = + { + .id = DECOR_SEEDOT_DOLL, + .name = _("SEEDOT DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_DOLL, + .price = 3000, + .description = DecorDesc_SEEDOT_DOLL, + .tiles = DecorGfx_SEEDOT_DOLL, + }, + + [DECOR_PIKA_CUSHION] = + { + .id = DECOR_PIKA_CUSHION, + .name = _("PIKA CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_PIKA_CUSHION, + .tiles = DecorGfx_PIKA_CUSHION, + }, + + [DECOR_ROUND_CUSHION] = + { + .id = DECOR_ROUND_CUSHION, + .name = _("ROUND CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_ROUND_CUSHION, + .tiles = DecorGfx_ROUND_CUSHION, + }, + + [DECOR_KISS_CUSHION] = + { + .id = DECOR_KISS_CUSHION, + .name = _("KISS CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_KISS_CUSHION, + .tiles = DecorGfx_KISS_CUSHION, + }, + + [DECOR_ZIGZAG_CUSHION] = + { + .id = DECOR_ZIGZAG_CUSHION, + .name = _("ZIGZAG CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_ZIGZAG_CUSHION, + .tiles = DecorGfx_ZIGZAG_CUSHION, + }, + + [DECOR_SPIN_CUSHION] = + { + .id = DECOR_SPIN_CUSHION, + .name = _("SPIN CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_SPIN_CUSHION, + .tiles = DecorGfx_SPIN_CUSHION, + }, + + [DECOR_DIAMOND_CUSHION] = + { + .id = DECOR_DIAMOND_CUSHION, + .name = _("DIAMOND CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_DIAMOND_CUSHION, + .tiles = DecorGfx_DIAMOND_CUSHION, + }, + + [DECOR_BALL_CUSHION] = + { + .id = DECOR_BALL_CUSHION, + .name = _("BALL CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_BALL_CUSHION, + .tiles = DecorGfx_BALL_CUSHION, + }, + + [DECOR_GRASS_CUSHION] = + { + .id = DECOR_GRASS_CUSHION, + .name = _("GRASS CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_GRASS_CUSHION, + .tiles = DecorGfx_GRASS_CUSHION, + }, + + [DECOR_FIRE_CUSHION] = + { + .id = DECOR_FIRE_CUSHION, + .name = _("FIRE CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_FIRE_CUSHION, + .tiles = DecorGfx_FIRE_CUSHION, + }, + + [DECOR_WATER_CUSHION] = + { + .id = DECOR_WATER_CUSHION, + .name = _("WATER CUSHION"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x1, + .category = DECORCAT_CUSHION, + .price = 2000, + .description = DecorDesc_WATER_CUSHION, + .tiles = DecorGfx_WATER_CUSHION, + }, + + [DECOR_SNORLAX_DOLL] = + { + .id = DECOR_SNORLAX_DOLL, + .name = _("SNORLAX DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_SNORLAX_DOLL, + .tiles = DecorGfx_SNORLAX_DOLL, + }, + + [DECOR_RHYDON_DOLL] = + { + .id = DECOR_RHYDON_DOLL, + .name = _("RHYDON DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_RHYDON_DOLL, + .tiles = DecorGfx_RHYDON_DOLL, + }, + + [DECOR_LAPRAS_DOLL] = + { + .id = DECOR_LAPRAS_DOLL, + .name = _("LAPRAS DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_LAPRAS_DOLL, + .tiles = DecorGfx_LAPRAS_DOLL, + }, + + [DECOR_VENUSAUR_DOLL] = + { + .id = DECOR_VENUSAUR_DOLL, + .name = _("VENUSAUR DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_VENUSAUR_DOLL, + .tiles = DecorGfx_VENUSAUR_DOLL, + }, + + [DECOR_CHARIZARD_DOLL] = + { + .id = DECOR_CHARIZARD_DOLL, + .name = _("CHARIZARD DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_CHARIZARD_DOLL, + .tiles = DecorGfx_CHARIZARD_DOLL, + }, + + [DECOR_BLASTOISE_DOLL] = + { + .id = DECOR_BLASTOISE_DOLL, + .name = _("BLASTOISE DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_BLASTOISE_DOLL, + .tiles = DecorGfx_BLASTOISE_DOLL, + }, + + [DECOR_WAILMER_DOLL] = + { + .id = DECOR_WAILMER_DOLL, + .name = _("WAILMER DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_WAILMER_DOLL, + .tiles = DecorGfx_WAILMER_DOLL, + }, + + [DECOR_REGIROCK_DOLL] = + { + .id = DECOR_REGIROCK_DOLL, + .name = _("REGIROCK DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_REGIROCK_DOLL, + .tiles = DecorGfx_REGIROCK_DOLL, + }, + + [DECOR_REGICE_DOLL] = + { + .id = DECOR_REGICE_DOLL, + .name = _("REGICE DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_REGICE_DOLL, + .tiles = DecorGfx_REGICE_DOLL, + }, + + [DECOR_REGISTEEL_DOLL] = + { + .id = DECOR_REGISTEEL_DOLL, + .name = _("REGISTEEL DOLL"), + .permission = DECORPERM_SPRITE, + .shape = DECORSHAPE_1x2, + .category = DECORCAT_DOLL, + .price = 10000, + .description = DecorDesc_REGISTEEL_DOLL, + .tiles = DecorGfx_REGISTEEL_DOLL, + } }; diff --git a/src/data/decoration/tilemaps.h b/src/data/decoration/tilemaps.h index 12fe31dc08..eebb3acb25 100644 --- a/src/data/decoration/tilemaps.h +++ b/src/data/decoration/tilemaps.h @@ -1,37 +1,37 @@ -const u8 Unknown_085A6FB0[] = { +static const u8 sDecorTilemap_1x1_Tiles[] = { 0x00, 0x01, 0x02, 0x03 }; -const u8 Unknown_085A6FB4[] = { +static const u8 sDecorTilemap_3x1_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d }; -const u8 Unknown_085A6FC0[] = { +static const u8 sDecorTilemap_2x2_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; -const u8 Unknown_085A6FD0[] = { +static const u8 sDecorTilemap_1x3_Tiles[] = { 0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0c, 0x0d, 0x10, 0x11, 0x14, 0x15 }; -const u8 Unknown_085A6FDC[] = { +static const u8 sDecorTilemap_2x1_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; -const u8 Unknown_085A6FE4[] = { +static const u8 sDecorTilemap_4x2_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f }; -const u8 Unknown_085A7004[] = { +static const u8 sDecorTilemap_3x3_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, @@ -40,60 +40,60 @@ const u8 Unknown_085A7004[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d }; -const u8 Unknown_085A7028[] = { +static const u8 sDecorTilemap_3x2_Tiles[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d }; -const u8 Unknown_085A7040[] = { +static const u8 sDecorTilemap_1x1_Y[] = { 0x00, 0x00, 0x00, 0x00 }; -const u8 Unknown_085A7044[] = { +static const u8 sDecorTilemap_2x1_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01 }; -const u8 Unknown_085A704C[] = { +static const u8 sDecorTilemap_3x1_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02 }; -const u8 Unknown_085A7058[] = { +static const u8 sDecorTilemap_4x2_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07 }; -const u8 Unknown_085A7078[] = { +static const u8 sDecorTilemap_2x2_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03 }; -const u8 Unknown_085A7088[] = { +static const u8 sDecorTilemap_1x2_Y[] = { 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01 }; -const u8 Unknown_085A7090[] = { +static const u8 sDecorTilemap_1x3_Y[] = { 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02 }; -const u8 Unknown_085A709C[] = { +static const u8 sDecorTilemap_2x4_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07 }; -const u8 Unknown_085A70BC[] = { +static const u8 sDecorTilemap_3x3_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, @@ -102,60 +102,60 @@ const u8 Unknown_085A70BC[] = { 0x06, 0x06, 0x07, 0x07, 0x08, 0x08 }; -const u8 Unknown_085A70E0[] = { +static const u8 sDecorTilemap_3x2_Y[] = { 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05 }; -const u8 Unknown_085A70F8[] = { +static const u8 sDecorTilemap_1x1_X[] = { 0x04, 0x05, 0x06, 0x07 }; -const u8 Unknown_085A70FC[] = { +static const u8 sDecorTilemap_2x1_X[] = { 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7104[] = { +static const u8 sDecorTilemap_3x1_X[] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7110[] = { +static const u8 sDecorTilemap_4x2_X[] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7130[] = { +static const u8 sDecorTilemap_2x2_X[] = { 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7140[] = { +static const u8 sDecorTilemap_1x2_X[] = { 0x04, 0x05, 0x06, 0x07, 0x04, 0x05, 0x06, 0x07 }; -const u8 Unknown_085A7148[] = { +static const u8 sDecorTilemap_1x3_X[] = { 0x04, 0x05, 0x06, 0x07, 0x04, 0x05, 0x06, 0x07, 0x04, 0x05, 0x06, 0x07 }; -const u8 Unknown_085A7154[] = { +static const u8 sDecorTilemap_2x4_X[] = { 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7174[] = { +static const u8 sDecorTilemap_3x3_X[] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, @@ -164,67 +164,78 @@ const u8 Unknown_085A7174[] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -const u8 Unknown_085A7198[] = { +static const u8 sDecorTilemap_3x2_X[] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07 }; -const struct { +#define DECORSIZE(width, height)((width) * (height) * 4) + +static const struct { const u8 *tiles; const u8 *y; const u8 *x; u8 size; -} gUnknown_085A71B0[] = { - { - Unknown_085A6FB0, - Unknown_085A7040, - Unknown_085A70F8, - 0x04 - }, { - Unknown_085A6FDC, - Unknown_085A7044, - Unknown_085A70FC, - 0x08 - }, { - Unknown_085A6FB4, - Unknown_085A704C, - Unknown_085A7104, - 0x0c - }, { - Unknown_085A6FE4, - Unknown_085A7058, - Unknown_085A7110, - 0x20 - }, { - Unknown_085A6FC0, - Unknown_085A7078, - Unknown_085A7130, - 0x10 - }, { - Unknown_085A6FDC, - Unknown_085A7088, - Unknown_085A7140, - 0x08 - }, { - Unknown_085A6FD0, - Unknown_085A7090, - Unknown_085A7148, - 0x0c - }, { - Unknown_085A6FE4, - Unknown_085A709C, - Unknown_085A7154, - 0x20 - }, { - Unknown_085A7004, - Unknown_085A70BC, - Unknown_085A7174, - 0x24 - }, { - Unknown_085A7028, - Unknown_085A70E0, - Unknown_085A7198, - 0x18 +} sDecorTilemaps[] = { + [DECORSHAPE_1x1] = { + .tiles = sDecorTilemap_1x1_Tiles, + .y = sDecorTilemap_1x1_Y, + .x = sDecorTilemap_1x1_X, + .size = DECORSIZE(1, 1) + }, + [DECORSHAPE_2x1] = { + .tiles = sDecorTilemap_2x1_Tiles, + .y = sDecorTilemap_2x1_Y, + .x = sDecorTilemap_2x1_X, + .size = DECORSIZE(2, 1) + }, + [DECORSHAPE_3x1] = { + .tiles = sDecorTilemap_3x1_Tiles, + .y = sDecorTilemap_3x1_Y, + .x = sDecorTilemap_3x1_X, + .size = DECORSIZE(3, 1) + }, + [DECORSHAPE_4x2] = { + .tiles = sDecorTilemap_4x2_Tiles, + .y = sDecorTilemap_4x2_Y, + .x = sDecorTilemap_4x2_X, + .size = DECORSIZE(4, 2) + }, + [DECORSHAPE_2x2] = { + .tiles = sDecorTilemap_2x2_Tiles, + .y = sDecorTilemap_2x2_Y, + .x = sDecorTilemap_2x2_X, + .size = DECORSIZE(2, 2) + }, + [DECORSHAPE_1x2] = { + .tiles = sDecorTilemap_2x1_Tiles, + .y = sDecorTilemap_1x2_Y, + .x = sDecorTilemap_1x2_X, + .size = DECORSIZE(1, 2) + }, + [DECORSHAPE_1x3] = { + .tiles = sDecorTilemap_1x3_Tiles, + .y = sDecorTilemap_1x3_Y, + .x = sDecorTilemap_1x3_X, + .size = DECORSIZE(1, 3) + }, + [DECORSHAPE_2x4] = { + .tiles = sDecorTilemap_4x2_Tiles, + .y = sDecorTilemap_2x4_Y, + .x = sDecorTilemap_2x4_X, + .size = DECORSIZE(2, 4) + }, + [DECORSHAPE_3x3] = { + .tiles = sDecorTilemap_3x3_Tiles, + .y = sDecorTilemap_3x3_Y, + .x = sDecorTilemap_3x3_X, + .size = DECORSIZE(3, 3) + }, + [DECORSHAPE_3x2] = { + .tiles = sDecorTilemap_3x2_Tiles, + .y = sDecorTilemap_3x2_Y, + .x = sDecorTilemap_3x2_X, + .size = DECORSIZE(3, 2) }}; diff --git a/src/data/decoration/tiles.h b/src/data/decoration/tiles.h index de5c43575b..1b25da3d4d 100644 --- a/src/data/decoration/tiles.h +++ b/src/data/decoration/tiles.h @@ -1,4 +1,4 @@ -#define DECOR_TILE(name) (METATILE_SecretBase_##name - 0x200) +#define DECOR_TILE(name) (METATILE_SecretBase_##name - NUM_TILES_IN_PRIMARY) const u16 DecorGfx_SMALL_DESK[] = { DECOR_TILE(SmallDesk) diff --git a/src/data/easy_chat/easy_chat_group_pokemon.h b/src/data/easy_chat/easy_chat_group_pokemon.h index 9993a51446..a6e1c48ea3 100755 --- a/src/data/easy_chat/easy_chat_group_pokemon.h +++ b/src/data/easy_chat/easy_chat_group_pokemon.h @@ -1,5 +1,3 @@ -#include "constants/species.h" - const u16 gEasyChatGroup_Pokemon[] = { SPECIES_ABRA, SPECIES_ABSOL, diff --git a/src/data/easy_chat/easy_chat_group_pokemon2.h b/src/data/easy_chat/easy_chat_group_pokemon2.h index 35b0a03cbb..44dce0cc84 100755 --- a/src/data/easy_chat/easy_chat_group_pokemon2.h +++ b/src/data/easy_chat/easy_chat_group_pokemon2.h @@ -1,5 +1,3 @@ -#include "constants/species.h" - const u16 gEasyChatGroup_Pokemon2[] = { SPECIES_ABRA, SPECIES_AERODACTYL, diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index 1626b9f323..4fc3ecff69 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -1286,4 +1286,4 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = { .callback = UpdateRayquazaSpotlightEffect, }; -static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPalette2, FLDEFF_PAL_TAG_UNKNOWN}; +static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPal_Npc3, FLDEFF_PAL_TAG_UNKNOWN}; diff --git a/src/data/graphics/trainers.h b/src/data/graphics/trainers.h index 3de77d6ecb..206d73a881 100644 --- a/src/data/graphics/trainers.h +++ b/src/data/graphics/trainers.h @@ -7,8 +7,8 @@ const u32 gTrainerPalette_AquaGruntM[] = INCBIN_U32("graphics/trainers/palettes/ const u32 gTrainerFrontPic_PokemonBreederF[] = INCBIN_U32("graphics/trainers/front_pics/pokemon_breeder_f_front_pic.4bpp.lz"); const u32 gTrainerPalette_PokemonBreederF[] = INCBIN_U32("graphics/trainers/palettes/pokemon_breeder_f.gbapal.lz"); -const u32 gTrainerFrontPic_CoolTrainerM[] = INCBIN_U32("graphics/trainers/front_pics/cool_trainer_m_front_pic.4bpp.lz"); -const u32 gTrainerPalette_CoolTrainerM[] = INCBIN_U32("graphics/trainers/palettes/cool_trainer_m.gbapal.lz"); +const u32 gTrainerFrontPic_CoolTrainerM[] = INCBIN_U32("graphics/trainers/front_pics/cooltrainer_m_front_pic.4bpp.lz"); +const u32 gTrainerPalette_CoolTrainerM[] = INCBIN_U32("graphics/trainers/palettes/cooltrainer_m.gbapal.lz"); const u32 gTrainerFrontPic_BirdKeeper[] = INCBIN_U32("graphics/trainers/front_pics/bird_keeper_front_pic.4bpp.lz"); const u32 gTrainerPalette_BirdKeeper[] = INCBIN_U32("graphics/trainers/palettes/bird_keeper.gbapal.lz"); @@ -58,8 +58,8 @@ const u32 gTrainerPalette_TuberF[] = INCBIN_U32("graphics/trainers/palettes/tube const u32 gTrainerFrontPic_TuberM[] = INCBIN_U32("graphics/trainers/front_pics/tuber_m_front_pic.4bpp.lz"); const u32 gTrainerPalette_TuberM[] = INCBIN_U32("graphics/trainers/palettes/tuber_m.gbapal.lz"); -const u32 gTrainerFrontPic_CoolTrainerF[] = INCBIN_U32("graphics/trainers/front_pics/cool_trainer_f_front_pic.4bpp.lz"); -const u32 gTrainerPalette_CoolTrainerF[] = INCBIN_U32("graphics/trainers/palettes/cool_trainer_f.gbapal.lz"); +const u32 gTrainerFrontPic_CoolTrainerF[] = INCBIN_U32("graphics/trainers/front_pics/cooltrainer_f_front_pic.4bpp.lz"); +const u32 gTrainerPalette_CoolTrainerF[] = INCBIN_U32("graphics/trainers/palettes/cooltrainer_f.gbapal.lz"); const u32 gTrainerFrontPic_Lady[] = INCBIN_U32("graphics/trainers/front_pics/lady_front_pic.4bpp.lz"); const u32 gTrainerPalette_Lady[] = INCBIN_U32("graphics/trainers/palettes/lady.gbapal.lz"); diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h index 738a6dc120..37bae7e951 100644 --- a/src/data/lilycove_lady.h +++ b/src/data/lilycove_lady.h @@ -1,7 +1,6 @@ #include "constants/easy_chat.h" #include "constants/event_objects.h" #include "constants/items.h" -#include "constants/species.h" #include "constants/moves.h" static const u16 sContestLadyMonGfxId[] = @@ -9,7 +8,7 @@ static const u16 sContestLadyMonGfxId[] = OBJ_EVENT_GFX_ZIGZAGOON_1, OBJ_EVENT_GFX_SKITTY, OBJ_EVENT_GFX_POOCHYENA, - OBJ_EVENT_GFX_KECLEON_1, + OBJ_EVENT_GFX_KECLEON, OBJ_EVENT_GFX_PIKACHU }; diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 50fc6715c7..81d83a8563 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -1,26 +1,26 @@ const u32 gObjectEventPic_BrendanNormal[] = INCBIN_U32("graphics/object_events/pics/people/brendan/walking.4bpp"); const u32 gObjectEventPic_BrendanRunning[] = INCBIN_U32("graphics/object_events/pics/people/brendan/running.4bpp"); -const u16 gObjectEventPalette8[] = INCBIN_U16("graphics/object_events/palettes/08.gbapal"); +const u16 gObjectEventPal_Brendan[] = INCBIN_U16("graphics/object_events/palettes/brendan.gbapal"); const u32 gObjectEventPic_RubySapphireBrendanNormal[] = INCBIN_U32("graphics/object_events/pics/people/ruby_sapphire_brendan/walking.4bpp"); const u32 gObjectEventPic_RubySapphireBrendanRunning[] = INCBIN_U32("graphics/object_events/pics/people/ruby_sapphire_brendan/running.4bpp"); -const u16 gObjectEventPalette33[] = INCBIN_U16("graphics/object_events/palettes/33.gbapal"); -const u16 gObjectEventPaletteNull1[16] = {}; -const u16 gObjectEventPaletteNull2[16] = {}; -const u16 gObjectEventPaletteNull3[16] = {}; -const u16 gObjectEventPaletteNull4[16] = {}; -const u16 gObjectEventPaletteNull5[16] = {}; -const u16 gObjectEventPaletteNull6[16] = {}; -const u16 gObjectEventPaletteNull7[16] = {}; -const u16 gObjectEventPaletteNull8[16] = {}; -const u16 gObjectEventPaletteNull9[16] = {}; -const u16 gObjectEventPaletteNull10[16] = {}; -const u16 gObjectEventPaletteNull11[16] = {}; -const u16 gObjectEventPaletteNull12[16] = {}; -const u16 gObjectEventPaletteNull13[16] = {}; -const u16 gObjectEventPaletteNull14[16] = {}; -const u16 gObjectEventPaletteNull15[16] = {}; -const u16 gObjectEventPalette9[] = INCBIN_U16("graphics/object_events/palettes/09.gbapal"); -const u16 gObjectEventPalette10[] = INCBIN_U16("graphics/object_events/palettes/10.gbapal"); +const u16 gObjectEventPal_RubySapphireBrendan[] = INCBIN_U16("graphics/object_events/palettes/ruby_sapphire_brendan.gbapal"); +const u16 gObjectEventPal_Null1[16] = {}; +const u16 gObjectEventPal_Null2[16] = {}; +const u16 gObjectEventPal_Null3[16] = {}; +const u16 gObjectEventPal_Null4[16] = {}; +const u16 gObjectEventPal_Null5[16] = {}; +const u16 gObjectEventPal_Null6[16] = {}; +const u16 gObjectEventPal_Null7[16] = {}; +const u16 gObjectEventPal_Null8[16] = {}; +const u16 gObjectEventPal_Null9[16] = {}; +const u16 gObjectEventPal_Null10[16] = {}; +const u16 gObjectEventPal_Null11[16] = {}; +const u16 gObjectEventPal_Null12[16] = {}; +const u16 gObjectEventPal_Null13[16] = {}; +const u16 gObjectEventPal_Null14[16] = {}; +const u16 gObjectEventPal_Null15[16] = {}; +const u16 gObjectEventPal_BrendanReflection[] = INCBIN_U16("graphics/object_events/palettes/brendan_reflection.gbapal"); +const u16 gObjectEventPal_BridgeReflection[] = INCBIN_U16("graphics/object_events/palettes/bridge_reflection.gbapal"); const u32 gObjectEventPic_BrendanFieldMove[] = INCBIN_U32("graphics/object_events/pics/people/brendan/field_move.4bpp"); const u32 gObjectEventPic_BrendanSurfing[] = INCBIN_U32("graphics/object_events/pics/people/brendan/surfing.4bpp"); const u32 gObjectEventPic_BrendanMachBike[] = INCBIN_U32("graphics/object_events/pics/people/brendan/mach_bike.4bpp"); @@ -31,43 +31,43 @@ const u32 gObjectEventPic_BrendanDecorating[] = INCBIN_U32("graphics/object_even const u32 gObjectEventPic_MayDecorating[] = INCBIN_U32("graphics/object_events/pics/people/may/decorating.4bpp"); const u32 gObjectEventPic_BrendanUnderwater[] = INCBIN_U32("graphics/object_events/pics/people/brendan/underwater.4bpp"); const u32 gObjectEventPic_MayUnderwater[] = INCBIN_U32("graphics/object_events/pics/people/may/underwater.4bpp"); -const u16 gObjectEventPalette11[] = INCBIN_U16("graphics/object_events/palettes/11.gbapal"); +const u16 gObjectEventPal_PlayerUnderwater[] = INCBIN_U16("graphics/object_events/palettes/player_underwater.gbapal"); const u32 gObjectEventPic_MayNormal[] = INCBIN_U32("graphics/object_events/pics/people/may/walking.4bpp"); const u32 gObjectEventPic_MayRunning[] = INCBIN_U32("graphics/object_events/pics/people/may/running.4bpp"); -const u16 gObjectEventPalette17[] = INCBIN_U16("graphics/object_events/palettes/17.gbapal"); -const u16 gObjectEventPalette18[] = INCBIN_U16("graphics/object_events/palettes/18.gbapal"); +const u16 gObjectEventPal_May[] = INCBIN_U16("graphics/object_events/palettes/may.gbapal"); +const u16 gObjectEventPal_MayReflection[] = INCBIN_U16("graphics/object_events/palettes/may_reflection.gbapal"); const u32 gObjectEventPic_RubySapphireMayNormal[] = INCBIN_U32("graphics/object_events/pics/people/ruby_sapphire_may/walking.4bpp"); const u32 gObjectEventPic_RubySapphireMayRunning[] = INCBIN_U32("graphics/object_events/pics/people/ruby_sapphire_may/running.4bpp"); -const u16 gObjectEventPalette34[] = INCBIN_U16("graphics/object_events/palettes/34.gbapal"); +const u16 gObjectEventPal_RubySapphireMay[] = INCBIN_U16("graphics/object_events/palettes/ruby_sapphire_may.gbapal"); const u16 gUnusedObjectEventPalette[] = INCBIN_U16("graphics/object_events/palettes/unused_palette.gbapal"); -const u16 gObjectEventPaletteNull16[16] = {}; -const u16 gObjectEventPaletteNull17[16] = {}; -const u16 gObjectEventPaletteNull18[16] = {}; -const u16 gObjectEventPaletteNull19[16] = {}; -const u16 gObjectEventPaletteNull20[16] = {}; -const u16 gObjectEventPaletteNull21[16] = {}; -const u16 gObjectEventPaletteNull22[16] = {}; -const u16 gObjectEventPaletteNull23[16] = {}; -const u16 gObjectEventPaletteNull24[16] = {}; -const u16 gObjectEventPaletteNull25[16] = {}; -const u16 gObjectEventPaletteNull26[16] = {}; -const u16 gObjectEventPaletteNull27[16] = {}; -const u16 gObjectEventPaletteNull28[16] = {}; -const u16 gObjectEventPaletteNull29[16] = {}; +const u16 gObjectEventPal_Null16[16] = {}; +const u16 gObjectEventPal_Null17[16] = {}; +const u16 gObjectEventPal_Null18[16] = {}; +const u16 gObjectEventPal_Null19[16] = {}; +const u16 gObjectEventPal_Null20[16] = {}; +const u16 gObjectEventPal_Null21[16] = {}; +const u16 gObjectEventPal_Null22[16] = {}; +const u16 gObjectEventPal_Null23[16] = {}; +const u16 gObjectEventPal_Null24[16] = {}; +const u16 gObjectEventPal_Null25[16] = {}; +const u16 gObjectEventPal_Null26[16] = {}; +const u16 gObjectEventPal_Null27[16] = {}; +const u16 gObjectEventPal_Null28[16] = {}; +const u16 gObjectEventPal_Null29[16] = {}; const u32 gObjectEventPic_MayMachBike[] = INCBIN_U32("graphics/object_events/pics/people/may/mach_bike.4bpp"); const u32 gObjectEventPic_MayAcroBike[] = INCBIN_U32("graphics/object_events/pics/people/may/acro_bike.4bpp"); const u32 gObjectEventPic_MaySurfing[] = INCBIN_U32("graphics/object_events/pics/people/may/surfing.4bpp"); const u32 gObjectEventPic_MayFieldMove[] = INCBIN_U32("graphics/object_events/pics/people/may/field_move.4bpp"); const u32 gObjectEventPic_MayFishing[] = INCBIN_U32("graphics/object_events/pics/people/may/fishing.4bpp"); const u32 gObjectEventPic_MayWatering[] = INCBIN_U32("graphics/object_events/pics/people/may/watering.4bpp"); -const u16 gObjectEventPalette0[] = INCBIN_U16("graphics/object_events/palettes/00.gbapal"); -const u16 gObjectEventPalette1[] = INCBIN_U16("graphics/object_events/palettes/01.gbapal"); -const u16 gObjectEventPalette2[] = INCBIN_U16("graphics/object_events/palettes/02.gbapal"); -const u16 gObjectEventPalette3[] = INCBIN_U16("graphics/object_events/palettes/03.gbapal"); -const u16 gObjectEventPalette4[] = INCBIN_U16("graphics/object_events/palettes/04.gbapal"); -const u16 gObjectEventPalette5[] = INCBIN_U16("graphics/object_events/palettes/05.gbapal"); -const u16 gObjectEventPalette6[] = INCBIN_U16("graphics/object_events/palettes/06.gbapal"); -const u16 gObjectEventPalette7[] = INCBIN_U16("graphics/object_events/palettes/07.gbapal"); +const u16 gObjectEventPal_Npc1[] = INCBIN_U16("graphics/object_events/palettes/npc_1.gbapal"); +const u16 gObjectEventPal_Npc2[] = INCBIN_U16("graphics/object_events/palettes/npc_2.gbapal"); +const u16 gObjectEventPal_Npc3[] = INCBIN_U16("graphics/object_events/palettes/npc_3.gbapal"); +const u16 gObjectEventPal_Npc4[] = INCBIN_U16("graphics/object_events/palettes/npc_4.gbapal"); +const u16 gObjectEventPal_Npc1Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_1_reflection.gbapal"); +const u16 gObjectEventPal_Npc2Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_2_reflection.gbapal"); +const u16 gObjectEventPal_Npc3Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_3_reflection.gbapal"); +const u16 gObjectEventPal_Npc4Reflection[] = INCBIN_U16("graphics/object_events/palettes/npc_4_reflection.gbapal"); const u32 gObjectEventPic_NinjaBoy[] = INCBIN_U32("graphics/object_events/pics/people/ninja_boy.4bpp"); const u32 gObjectEventPic_Twin[] = INCBIN_U32("graphics/object_events/pics/people/twin.4bpp"); const u32 gObjectEventPic_Boy1[] = INCBIN_U32("graphics/object_events/pics/people/boy_1.4bpp"); @@ -177,10 +177,10 @@ const u32 gObjectEventPic_Wingull[] = INCBIN_U32("graphics/object_events/pics/po const u32 gObjectEventPic_TuberMSwimming[] = INCBIN_U32("graphics/object_events/pics/people/tuber_m_swimming.4bpp"); const u32 gObjectEventPic_Azurill[] = INCBIN_U32("graphics/object_events/pics/pokemon/azurill.4bpp"); const u32 gObjectEventPic_Mom[] = INCBIN_U32("graphics/object_events/pics/people/mom.4bpp"); -const u16 gObjectEventPalette22[] = INCBIN_U16("graphics/object_events/palettes/22.gbapal"); -const u16 gObjectEventPalette23[] = INCBIN_U16("graphics/object_events/palettes/23.gbapal"); -const u16 gObjectEventPalette24[] = INCBIN_U16("graphics/object_events/palettes/24.gbapal"); -const u16 gObjectEventPalette25[] = INCBIN_U16("graphics/object_events/palettes/25.gbapal"); +const u16 gObjectEventPal_Kyogre[] = INCBIN_U16("graphics/object_events/palettes/kyogre.gbapal"); +const u16 gObjectEventPal_KyogreReflection[] = INCBIN_U16("graphics/object_events/palettes/kyogre_reflection.gbapal"); +const u16 gObjectEventPal_Groudon[] = INCBIN_U16("graphics/object_events/palettes/groudon.gbapal"); +const u16 gObjectEventPal_GroudonReflection[] = INCBIN_U16("graphics/object_events/palettes/groudon_reflection.gbapal"); const u32 gObjectEventPic_UnusedNatuDoll[] = INCBIN_U32("graphics/object_events/pics/dolls/unused_natu_doll.4bpp"); const u32 gObjectEventPic_UnusedMagnemiteDoll[] = INCBIN_U32("graphics/object_events/pics/dolls/unused_magnemite_doll.4bpp"); const u32 gObjectEventPic_UnusedSquirtleDoll[] = INCBIN_U32("graphics/object_events/pics/dolls/unused_squirtle_doll.4bpp"); @@ -238,20 +238,20 @@ const u32 gObjectEventPic_PushableBoulder[] = INCBIN_U32("graphics/object_events const u32 gObjectEventPic_MrBrineysBoat[] = INCBIN_U32("graphics/object_events/pics/misc/mr_brineys_boat.4bpp"); const u32 gObjectEventPic_Fossil[] = INCBIN_U32("graphics/object_events/pics/misc/fossil.4bpp"); const u32 gObjectEventPic_SubmarineShadow[] = INCBIN_U32("graphics/object_events/pics/misc/submarine_shadow.4bpp"); -const u16 gObjectEventPalette26[] = INCBIN_U16("graphics/object_events/palettes/26.gbapal"); +const u16 gObjectEventPal_SubmarineShadow[] = INCBIN_U16("graphics/object_events/palettes/submarine_shadow.gbapal"); const u32 gObjectEventPic_Truck[] = INCBIN_U32("graphics/object_events/pics/misc/truck.4bpp"); -const u16 gObjectEventPalette14[] = INCBIN_U16("graphics/object_events/palettes/14.gbapal"); +const u16 gObjectEventPal_Truck[] = INCBIN_U16("graphics/object_events/palettes/truck.gbapal"); const u32 gObjectEventPic_Vigoroth[] = INCBIN_U32("graphics/object_events/pics/pokemon/vigoroth.4bpp"); -const u16 gObjectEventPalette15[] = INCBIN_U16("graphics/object_events/palettes/15.gbapal"); +const u16 gObjectEventPal_Vigoroth[] = INCBIN_U16("graphics/object_events/palettes/vigoroth.gbapal"); const u32 gObjectEventPic_BirchsBag[] = INCBIN_U32("graphics/object_events/pics/misc/birchs_bag.4bpp"); const u32 gObjectEventPic_EnemyZigzagoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/enemy_zigzagoon.4bpp"); -const u16 gObjectEventPalette16[] = INCBIN_U16("graphics/object_events/palettes/16.gbapal"); +const u16 gObjectEventPal_EnemyZigzagoon[] = INCBIN_U16("graphics/object_events/palettes/enemy_zigzagoon.gbapal"); const u32 gObjectEventPic_Poochyena[] = INCBIN_U32("graphics/object_events/pics/pokemon/poochyena.4bpp"); -const u16 gObjectEventPalette27[] = INCBIN_U16("graphics/object_events/palettes/27.gbapal"); +const u16 gObjectEventPal_Poochyena[] = INCBIN_U16("graphics/object_events/palettes/poochyena.gbapal"); const u32 gObjectEventPic_CableCar[] = INCBIN_U32("graphics/object_events/pics/misc/cable_car.4bpp"); -const u16 gObjectEventPalette20[] = INCBIN_U16("graphics/object_events/palettes/20.gbapal"); +const u16 gObjectEventPal_CableCar[] = INCBIN_U16("graphics/object_events/palettes/cable_car.gbapal"); const u32 gObjectEventPic_SSTidal[] = INCBIN_U32("graphics/object_events/pics/misc/ss_tidal.4bpp"); -const u16 gObjectEventPalette21[] = INCBIN_U16("graphics/object_events/palettes/21.gbapal"); +const u16 gObjectEventPal_SSTidal[] = INCBIN_U16("graphics/object_events/palettes/ss_tidal.gbapal"); const u32 gFieldEffectObjectPic_Sparkle[] = INCBIN_U32("graphics/field_effects/pics/sparkle.4bpp"); const u32 gObjectEventPic_BerryTreeDirtPile[] = INCBIN_U32("graphics/object_events/pics/berry_trees/dirt_pile.4bpp"); const u32 gObjectEventPic_BerryTreeSprout[] = INCBIN_U32("graphics/object_events/pics/berry_trees/sprout.4bpp"); @@ -287,8 +287,8 @@ const u32 gObjectEventPic_DurinBerryTree[] = INCBIN_U32("graphics/object_events/ const u32 gObjectEventPic_TamatoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/tamato.4bpp"); const u32 gFieldEffectObjectPic_SurfBlob[] = INCBIN_U32("graphics/field_effects/pics/surf_blob.4bpp"); const u32 gObjectEventPic_QuintyPlump[] = INCBIN_U32("graphics/object_events/pics/people/quinty_plump.4bpp"); -const u16 gObjectEventPalette12[] = INCBIN_U16("graphics/object_events/palettes/12.gbapal"); -const u16 gObjectEventPalette13[] = INCBIN_U16("graphics/object_events/palettes/13.gbapal"); +const u16 gObjectEventPal_QuintyPlump[] = INCBIN_U16("graphics/object_events/palettes/quinty_plump.gbapal"); +const u16 gObjectEventPal_QuintyPlumpReflection[] = INCBIN_U16("graphics/object_events/palettes/quinty_plump_reflection.gbapal"); const u32 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U32("graphics/field_effects/pics/shadow_small.4bpp"); const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effects/pics/shadow_medium.4bpp"); const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_large.4bpp"); @@ -339,15 +339,15 @@ const u32 gObjectEventPic_Dusclops[] = INCBIN_U32("graphics/object_events/pics/p const u32 gObjectEventPic_MysteryEventDeliveryman[] = INCBIN_U32("graphics/object_events/pics/people/mystery_event_deliveryman.4bpp"); const u32 gObjectEventPic_UnionRoomAttendant[] = INCBIN_U32("graphics/object_events/pics/people/union_room_attendant.4bpp"); const u32 gObjectEventPic_MovingBox[] = INCBIN_U32("graphics/object_events/pics/misc/moving_box.4bpp"); -const u16 gObjectEventPalette19[] = INCBIN_U16("graphics/object_events/palettes/19.gbapal"); +const u16 gObjectEventPal_MovingBox[] = INCBIN_U16("graphics/object_events/palettes/moving_box.gbapal"); const u32 gObjectEventPic_Sudowoodo[] = INCBIN_U32("graphics/object_events/pics/pokemon/sudowoodo.4bpp"); const u32 gObjectEventPic_Mew[] = INCBIN_U32("graphics/object_events/pics/pokemon/mew.4bpp"); -const u16 gObjectEventPalette28[] = INCBIN_U16("graphics/object_events/palettes/28.gbapal"); +const u16 gObjectEventPal_RedLeaf[] = INCBIN_U16("graphics/object_events/palettes/red_leaf.gbapal"); const u32 gObjectEventPic_Red[] = INCBIN_U32("graphics/object_events/pics/people/red.4bpp"); const u32 gObjectEventPic_Leaf[] = INCBIN_U32("graphics/object_events/pics/people/leaf.4bpp"); -const u16 gObjectEventPalette30[] = INCBIN_U16("graphics/object_events/palettes/30.gbapal"); +const u16 gObjectEventPal_BirthIslandStone[] = INCBIN_U16("graphics/object_events/palettes/birth_island_stone.gbapal"); const u32 gObjectEventPic_BirthIslandStone[] = INCBIN_U32("graphics/object_events/pics/misc/birth_island_stone.4bpp"); -const u16 gObjectEventPalette29[] = INCBIN_U16("graphics/object_events/palettes/29.gbapal"); +const u16 gObjectEventPal_Deoxys[] = INCBIN_U16("graphics/object_events/palettes/deoxys.gbapal"); const u32 gObjectEventPic_Deoxys[] = INCBIN_U32("graphics/object_events/pics/pokemon/deoxys.4bpp"); const u32 gObjectEventPic_Anabel[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/anabel.4bpp"); const u32 gObjectEventPic_Tucker[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/tucker.4bpp"); @@ -357,6 +357,6 @@ const u32 gObjectEventPic_Noland[] = INCBIN_U32("graphics/object_events/pics/peo const u32 gObjectEventPic_Lucy[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/lucy.4bpp"); const u32 gObjectEventPic_Brandon[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/brandon.4bpp"); const u32 gObjectEventPic_Lugia[] = INCBIN_U32("graphics/object_events/pics/pokemon/lugia.4bpp"); -const u16 gObjectEventPalette32[] = INCBIN_U16("graphics/object_events/palettes/32.gbapal"); +const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal"); const u32 gObjectEventPic_HoOh[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh.4bpp"); -const u16 gObjectEventPalette31[] = INCBIN_U16("graphics/object_events/palettes/31.gbapal"); +const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal"); diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index bb36c94366..c6c78dca99 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -1,245 +1,245 @@ -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_QuintyPlump = {0xFFFF, OBJ_EVENT_PAL_TAG_12, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_L, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_QuintyPlump, gObjectEventPicTable_QuintyPlump, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_NinjaBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_NinjaBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Twin = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Twin, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl1 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy2 = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LittleBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleGirl = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LittleGirl, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy3 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl3 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RichBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RichBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman1 = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FatMan = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_FatMan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanF = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PokefanF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ExpertM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertF = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ExpertF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman3 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanM = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PokefanM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman4 = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman4, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cook = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Cook, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkReceptionist = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LinkReceptionist, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldMan = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_OldMan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_OldWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Camper = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Camper, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Picnicker = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Picnicker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man3 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man3, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman5 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman5, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Youngster = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Youngster, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BugCatcher = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BugCatcher, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PsychicM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PsychicM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SchoolKidM = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SchoolKidM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maniac = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Maniac, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HexManiac = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HexManiac, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RayquazaStill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerM = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SwimmerM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerF = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SwimmerF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BlackBelt = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BlackBelt, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beauty = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Beauty, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lass = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lass, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gentleman = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Gentleman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sailor = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sailor, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fisherman = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Fisherman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RunningTriathleteM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RunningTriathleteF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberF = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberM = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hiker = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Hiker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_CyclingTriathleteM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_CyclingTriathleteF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Nurse, gObjectEventPicTable_Nurse, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ItemBall = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ItemBall, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, NULL, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStages = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStages = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ProfBirch = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ProfBirch, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man4 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man4, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man5 = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man5, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ReporterM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterF = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ReporterF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Storyteller = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedNatuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedNatuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMagnemiteDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedMagnemiteDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedSquirtleDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedSquirtleDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedWooperDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedWooperDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedPikachuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPorygon2Doll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedPorygon2Doll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CuttableTree = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_CuttableTree, gObjectEventPicTable_CuttableTree, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MartEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MartEmployee, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RooftopSaleWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RooftopSaleWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Teala = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Teala, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BreakableRock = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_BreakableRock, gObjectEventPicTable_BreakableRock, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PushableBoulder = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PushableBoulder, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MrBrineysBoat = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MrBrineysBoat, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {0xFFFF, OBJ_EVENT_PAL_TAG_14, OBJ_EVENT_PAL_TAG_NONE, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_48x48, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Truck, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothCarryingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_15, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_VigorothCarryingBox, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothFacingAway = {0xFFFF, OBJ_EVENT_PAL_TAG_15, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_VigorothFacingAway, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirchsBag = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirchsBag, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_EnemyZigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_16, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_EnemyZigzagoon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poochyena = {0xFFFF, OBJ_EVENT_PAL_TAG_27, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Poochyena, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Artist = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Artist, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayMachBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cameraman = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Cameraman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_11, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanUnderwater, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_11, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayUnderwater, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MovingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_19, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 10, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MovingBox, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {0xFFFF, OBJ_EVENT_PAL_TAG_20, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CableCar, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist2 = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist2, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DevonEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_DevonEmployee, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MagmaMemberM, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MagmaMemberF, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sidney = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sidney, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Phoebe = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Phoebe, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Glacia = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Glacia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drake = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Drake, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Roxanne = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Roxanne, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brawly = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Brawly, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wattson = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wattson, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flannery = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Flannery, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Norman = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Norman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Winona = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Winona, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Liza = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Liza, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tate = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Tate, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wallace = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wallace, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Steven = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Steven, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wally = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wally, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireLittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireLittleBoy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_BrendanFishing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_MayFishing, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HotSpringsOldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HotSpringsOldWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {0xFFFF, OBJ_EVENT_PAL_TAG_21, OBJ_EVENT_PAL_TAG_NONE, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, gObjectEventSpriteOamTables_96x40, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SSTidal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow = {0xFFFF, OBJ_EVENT_PAL_TAG_26, OBJ_EVENT_PAL_TAG_NONE, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, gObjectEventSpriteOamTables_88x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PichuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PichuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikachuDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MarillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MarillDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TogepiDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TogepiDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyndaquilDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CyndaquilDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ChikoritaDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ChikoritaDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TotodileDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TotodileDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_JigglypuffDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_JigglypuffDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MeowthDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MeowthDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ClefairyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ClefairyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DittoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DittoDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SmoochumDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SmoochumDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TreeckoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TreeckoDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TorchicDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TorchicDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MudkipDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MudkipDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DuskullDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DuskullDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WynautDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_WynautDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BaltoyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BaltoyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_KecleonDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AzurillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_AzurillDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SkittyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SkittyDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwabluDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SwabluDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GulpinDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_GulpinDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LotadDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_LotadDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SeedotDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SeedotDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikaCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikaCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RoundCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_RoundCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KissCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_KissCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ZigzagCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ZigzagCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SpinCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SpinCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DiamondCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DiamondCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BallCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GrassCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_GrassCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FireCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_FireCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WaterCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_WaterCushion, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigSnorlaxDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigSnorlaxDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRhydonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRhydonDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigLaprasDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigLaprasDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigVenusaurDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigVenusaurDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigCharizardDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigCharizardDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigBlastoiseDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigBlastoiseDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigWailmerDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigWailmerDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegirockDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegirockDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegiceDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegiceDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegisteelDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegisteelDoll, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latias = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latios = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GameboyKid = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GameboyKid, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ContestJudge = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ContestJudge, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanWatering, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayWatering, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_8, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BrendanDecorating, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MayDecorating, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Archie = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Archie, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maxie = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Maxie, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre1 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre3 = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreSide, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon3 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Groudon3, gObjectEventPicTable_GroudonSide, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fossil = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Fossil, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Skitty, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon1 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre2 = {0xFFFF, OBJ_EVENT_PAL_TAG_22, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_24, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Rayquaza2, gObjectEventPicTable_Rayquaza, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Zigzagoon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Pikachu, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azumarill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wingull, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_10, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {0xFFFF, OBJ_EVENT_PAL_TAG_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azurill, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mom, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkMay = {0xFFFF, OBJ_EVENT_PAL_TAG_17, OBJ_EVENT_PAL_TAG_10, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Juan = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Juan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scott = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scott, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MysteryEventDeliveryman = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MysteryEventDeliveryman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Statue = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Statue, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kirlia = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_S, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kirlia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dusclops = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Dusclops, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnionRoomAttendant = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_UnionRoomAttendant, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Red = {0xFFFF, OBJ_EVENT_PAL_TAG_28, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Red, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Leaf = {0xFFFF, OBJ_EVENT_PAL_TAG_28, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Leaf, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sudowoodo = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sudowoodo, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mew, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Deoxys = {0xFFFF, OBJ_EVENT_PAL_TAG_29, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Deoxys, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirthIslandStone = {0xFFFF, OBJ_EVENT_PAL_TAG_30, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirthIslandStone, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Anabel = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Anabel, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tucker = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Tucker, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Greta = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Greta, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spenser = {0xFFFF, OBJ_EVENT_PAL_TAG_0, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Spenser, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Noland = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Noland, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lucy = {0xFFFF, OBJ_EVENT_PAL_TAG_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lucy, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brandon = {0xFFFF, OBJ_EVENT_PAL_TAG_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Brandon, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_33, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireBrendan, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay = {0xFFFF, OBJ_EVENT_PAL_TAG_34, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireMay, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {0xFFFF, OBJ_EVENT_PAL_TAG_32, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lugia, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {0xFFFF, OBJ_EVENT_PAL_TAG_31, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_HoOh, gObjectEventPicTable_HoOh, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_QuintyPlump = {0xFFFF, OBJ_EVENT_PAL_TAG_QUINTY_PLUMP, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_L, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_QuintyPlump, gObjectEventPicTable_QuintyPlump, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_NinjaBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_NinjaBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Twin = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Twin, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LittleBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleGirl = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LittleGirl, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Boy3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Girl3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RichBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RichBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FatMan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_FatMan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PokefanF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ExpertM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ExpertF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PokefanM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman4 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman4, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cook = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Cook, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkReceptionist = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LinkReceptionist, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldMan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_OldMan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_OldWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Camper = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Camper, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Picnicker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Picnicker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man3, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman5 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Woman5, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Youngster = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Youngster, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BugCatcher = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BugCatcher, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PsychicM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_PsychicM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SchoolKidM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SchoolKidM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maniac = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Maniac, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HexManiac = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HexManiac, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RayquazaStill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SwimmerM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SwimmerF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BlackBelt = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BlackBelt, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beauty = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Beauty, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lass = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lass, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gentleman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Gentleman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sailor = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sailor, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fisherman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Fisherman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RunningTriathleteM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RunningTriathleteF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hiker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Hiker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_CyclingTriathleteM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_CyclingTriathleteF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Nurse, gObjectEventPicTable_Nurse, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ItemBall = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ItemBall, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, NULL, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStages = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStages = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BerryTree, gObjectEventPicTable_PechaBerryTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ProfBirch = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ProfBirch, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man4 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man4, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man5 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man5, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ReporterM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ReporterF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan1, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Storyteller = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MauvilleOldMan2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedNatuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedNatuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMagnemiteDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedMagnemiteDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedSquirtleDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedSquirtleDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedWooperDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedWooperDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedPikachuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPorygon2Doll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_UnusedPorygon2Doll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CuttableTree = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_CuttableTree, gObjectEventPicTable_CuttableTree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MartEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MartEmployee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RooftopSaleWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RooftopSaleWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Teala = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Teala, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BreakableRock = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_BreakableRock, gObjectEventPicTable_BreakableRock, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PushableBoulder = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PushableBoulder, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MrBrineysBoat = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MrBrineysBoat, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 16, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {0xFFFF, OBJ_EVENT_PAL_TAG_TRUCK, OBJ_EVENT_PAL_TAG_NONE, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_48x48, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Truck, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothCarryingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_VIGOROTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_VigorothCarryingBox, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothFacingAway = {0xFFFF, OBJ_EVENT_PAL_TAG_VIGOROTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_VigorothFacingAway, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirchsBag = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirchsBag, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_EnemyZigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_ZIGZAGOON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_EnemyZigzagoon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poochyena = {0xFFFF, OBJ_EVENT_PAL_TAG_POOCHYENA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Poochyena, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Artist = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Artist, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_BrendanAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanSurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_BrendanSurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_BrendanFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayNormal = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayMachBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayMachBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayAcroBike = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMaySurfing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayFieldMove = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cameraman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Cameraman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanUnderwater, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayUnderwater = {0xFFFF, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayUnderwater, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MovingBox = {0xFFFF, OBJ_EVENT_PAL_TAG_MOVING_BOX, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 10, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MovingBox, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {0xFFFF, OBJ_EVENT_PAL_TAG_CABLE_CAR, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CableCar, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist2, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DevonEmployee = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_DevonEmployee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberM = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MagmaMemberM, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberF = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MagmaMemberF, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sidney = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sidney, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Phoebe = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Phoebe, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Glacia = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Glacia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drake = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Drake, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Roxanne = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Roxanne, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brawly = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Brawly, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wattson = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wattson, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flannery = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Flannery, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Norman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Norman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Winona = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Winona, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Liza = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Liza, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tate = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Tate, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wallace = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wallace, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Steven = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Steven, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wally = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wally, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireLittleBoy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireLittleBoy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_BrendanFishing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFishing = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_MayFishing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HotSpringsOldWoman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HotSpringsOldWoman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {0xFFFF, OBJ_EVENT_PAL_TAG_SSTIDAL, OBJ_EVENT_PAL_TAG_NONE, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, gObjectEventSpriteOamTables_96x40, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SSTidal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow = {0xFFFF, OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, OBJ_EVENT_PAL_TAG_NONE, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_8x8, gObjectEventSpriteOamTables_88x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PichuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PichuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikachuDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikachuDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MarillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MarillDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TogepiDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TogepiDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyndaquilDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CyndaquilDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ChikoritaDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ChikoritaDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TotodileDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TotodileDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_JigglypuffDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_JigglypuffDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MeowthDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MeowthDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ClefairyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ClefairyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DittoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DittoDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SmoochumDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SmoochumDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TreeckoDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TreeckoDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TorchicDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_TorchicDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MudkipDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MudkipDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DuskullDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DuskullDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WynautDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_WynautDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BaltoyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BaltoyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_KecleonDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AzurillDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_AzurillDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SkittyDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SkittyDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwabluDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SwabluDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GulpinDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_GulpinDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LotadDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_LotadDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SeedotDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SeedotDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikaCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikaCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RoundCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_RoundCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KissCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_KissCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ZigzagCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_ZigzagCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SpinCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_SpinCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DiamondCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 5, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_DiamondCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BallCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GrassCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_GrassCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FireCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_FireCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WaterCushion = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_WaterCushion, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigSnorlaxDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigSnorlaxDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRhydonDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRhydonDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigLaprasDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigLaprasDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigVenusaurDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigVenusaurDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigCharizardDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigCharizardDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigBlastoiseDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigBlastoiseDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigWailmerDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigWailmerDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegirockDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegirockDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegiceDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegiceDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegisteelDoll = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BigRegisteelDoll, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latias = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latios = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_LatiasLatios, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GameboyKid = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GameboyKid, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ContestJudge = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_ContestJudge, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanWatering, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayWatering = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayWatering, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_BRENDAN, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BrendanDecorating, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayDecorating = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MayDecorating, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Archie = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Archie, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maxie = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Maxie, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon1 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreSide, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon3 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Groudon3, gObjectEventPicTable_GroudonSide, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fossil = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Fossil, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 3, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 4, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Regi, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Skitty, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre2 = {0xFFFF, OBJ_EVENT_PAL_TAG_KYOGRE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_KyogreFront, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon2 = {0xFFFF, OBJ_EVENT_PAL_TAG_GROUDON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_GroudonFront, gObjectEventRotScalAnimTable_KyogreGroudon}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza2 = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 2048, 64, 64, 4, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gObjectEventBaseOam_64x64, gObjectEventSpriteOamTables_64x64, gObjectEventImageAnimTable_Rayquaza2, gObjectEventPicTable_Rayquaza, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Zigzagoon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Pikachu, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azumarill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Wingull, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShadow = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 128, 16, 16, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kecleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_2, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_TuberMSwimming, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 128, 16, 16, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x16, gObjectEventSpriteOamTables_16x16, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Azurill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mom, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_BrendanNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkMay = {0xFFFF, OBJ_EVENT_PAL_TAG_MAY, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_BrendanMayNormal, gObjectEventPicTable_MayNormal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Juan = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Juan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scott = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scott, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MysteryEventDeliveryman = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MysteryEventDeliveryman, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Statue = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Statue, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kirlia = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_S, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Kirlia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dusclops = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Dusclops, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnionRoomAttendant = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_UnionRoomAttendant, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Red = {0xFFFF, OBJ_EVENT_PAL_TAG_RED_LEAF, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Red, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Leaf = {0xFFFF, OBJ_EVENT_PAL_TAG_RED_LEAF, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Leaf, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sudowoodo = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Sudowoodo, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Mew, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Deoxys = {0xFFFF, OBJ_EVENT_PAL_TAG_DEOXYS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Deoxys, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirthIslandStone = {0xFFFF, OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirthIslandStone, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Anabel = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Anabel, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tucker = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Tucker, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Greta = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Greta, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spenser = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_1, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Spenser, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Noland = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Noland, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lucy = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_4, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lucy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brandon = {0xFFFF, OBJ_EVENT_PAL_TAG_NPC_3, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 4, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Brandon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrendan = {0xFFFF, OBJ_EVENT_PAL_TAG_RS_BRENDAN, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireBrendan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay = {0xFFFF, OBJ_EVENT_PAL_TAG_RS_MAY, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, gObjectEventSpriteOamTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_RubySapphireMay, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {0xFFFF, OBJ_EVENT_PAL_TAG_LUGIA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Lugia, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {0xFFFF, OBJ_EVENT_PAL_TAG_HO_OH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, gObjectEventSpriteOamTables_32x32, gObjectEventImageAnimTable_HoOh, gObjectEventPicTable_HoOh, gDummySpriteAffineAnimTable}; diff --git a/src/data/object_events/object_event_graphics_info_pointers.h b/src/data/object_events/object_event_graphics_info_pointers.h index c72b0279de..0ca70fa337 100755 --- a/src/data/object_events/object_event_graphics_info_pointers.h +++ b/src/data/object_events/object_event_graphics_info_pointers.h @@ -202,7 +202,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon1; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kyogre2; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Groudon2; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza2; @@ -210,7 +210,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon2; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShadow; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom; @@ -451,7 +451,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM [OBJ_EVENT_GFX_REGICE] = &gObjectEventGraphicsInfo_Regice, [OBJ_EVENT_GFX_REGISTEEL] = &gObjectEventGraphicsInfo_Registeel, [OBJ_EVENT_GFX_SKITTY] = &gObjectEventGraphicsInfo_Skitty, - [OBJ_EVENT_GFX_KECLEON_1] = &gObjectEventGraphicsInfo_Kecleon1, + [OBJ_EVENT_GFX_KECLEON] = &gObjectEventGraphicsInfo_Kecleon, [OBJ_EVENT_GFX_KYOGRE_2] = &gObjectEventGraphicsInfo_Kyogre2, [OBJ_EVENT_GFX_GROUDON_2] = &gObjectEventGraphicsInfo_Groudon2, [OBJ_EVENT_GFX_RAYQUAZA_2] = &gObjectEventGraphicsInfo_Rayquaza2, @@ -459,7 +459,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM [OBJ_EVENT_GFX_PIKACHU] = &gObjectEventGraphicsInfo_Pikachu, [OBJ_EVENT_GFX_AZUMARILL] = &gObjectEventGraphicsInfo_Azumarill, [OBJ_EVENT_GFX_WINGULL] = &gObjectEventGraphicsInfo_Wingull, - [OBJ_EVENT_GFX_KECLEON_2] = &gObjectEventGraphicsInfo_Kecleon2, + [OBJ_EVENT_GFX_KECLEON_BRIDGE_SHADOW] = &gObjectEventGraphicsInfo_KecleonBridgeShadow, [OBJ_EVENT_GFX_TUBER_M_SWIMMING] = &gObjectEventGraphicsInfo_TuberMSwimming, [OBJ_EVENT_GFX_AZURILL] = &gObjectEventGraphicsInfo_Azurill, [OBJ_EVENT_GFX_MOM] = &gObjectEventGraphicsInfo_Mom, diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 698d97a436..1ed721e44b 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -26,12 +26,12 @@ const u8 gItemEffect_ParalyzeHeal[6] = { const u8 gItemEffect_FullRestore[7] = { [3] = ITEM3_STATUS_ALL, [4] = ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_FULL, }; const u8 gItemEffect_MaxPotion[7] = { [4] = ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_FULL, }; const u8 gItemEffect_HyperPotion[7] = { @@ -50,12 +50,12 @@ const u8 gItemEffect_FullHeal[6] = { const u8 gItemEffect_Revive[7] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -2, + [6] = ITEM6_HEAL_HALF, }; const u8 gItemEffect_MaxRevive[7] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_FULL, }; const u8 gItemEffect_FreshWater[7] = { @@ -107,7 +107,7 @@ const u8 gItemEffect_HealPowder[9] = { const u8 gItemEffect_RevivalHerb[10] = { [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = -1, + [6] = ITEM6_HEAL_FULL, [7] = -15, [8] = -15, [9] = -20, @@ -157,7 +157,7 @@ const u8 gItemEffect_BerryJuice[7] = { const u8 gItemEffect_SacredAsh[7] = { [0] = ITEM0_SACRED_ASH, [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, - [6] = -1, + [6] = ITEM6_HEAL_FULL, }; const u8 gItemEffect_HPUp[10] = { @@ -206,7 +206,7 @@ const u8 gItemEffect_RareCandy[10] = { [3] = ITEM3_LEVEL_UP, [4] = ITEM4_REVIVE | ITEM4_HEAL_HP, [5] = ITEM5_FRIENDSHIP_ALL, - [6] = 0xFD, + [6] = ITEM6_HEAL_LVL_UP, [7] = 5, [8] = 3, [9] = 2, diff --git a/src/data/trainer_graphics/back_pic_tables.h b/src/data/trainer_graphics/back_pic_tables.h index 86efd7905c..1dbffba428 100644 --- a/src/data/trainer_graphics/back_pic_tables.h +++ b/src/data/trainer_graphics/back_pic_tables.h @@ -13,18 +13,22 @@ const struct MonCoords gTrainerBackPicCoords[] = // this table goes functionally unused, since none of these pics are compressed // and the place they would get extracted to gets overwritten later anyway // the casts are so they'll play nice with the strict struct definition +#define TRAINER_BACK_SPRITE(trainerPic, sprite, size) [TRAINER_BACK_PIC_##trainerPic] = {(const u32 *)sprite, size, TRAINER_BACK_PIC_##trainerPic} + const struct CompressedSpriteSheet gTrainerBackPicTable[] = { - (const u32 *)gTrainerBackPic_Brendan, 0x2000, TRAINER_BACK_PIC_BRENDAN, - (const u32 *)gTrainerBackPic_May, 0x2000, TRAINER_BACK_PIC_MAY, - (const u32 *)gTrainerBackPic_Red, 0x2800, TRAINER_BACK_PIC_RED, - (const u32 *)gTrainerBackPic_Leaf, 0x2800, TRAINER_BACK_PIC_LEAF, - (const u32 *)gTrainerBackPic_RubySapphireBrendan, 0x2000, TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN, - (const u32 *)gTrainerBackPic_RubySapphireMay, 0x2000, TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY, - (const u32 *)gTrainerBackPic_Wally, 0x2000, TRAINER_BACK_PIC_WALLY, - (const u32 *)gTrainerBackPic_Steven, 0x2000, TRAINER_BACK_PIC_STEVEN, + TRAINER_BACK_SPRITE(BRENDAN, gTrainerBackPic_Brendan, 0x2000), + TRAINER_BACK_SPRITE(MAY, gTrainerBackPic_May, 0x2000), + TRAINER_BACK_SPRITE(RED, gTrainerBackPic_Red, 0x2800), + TRAINER_BACK_SPRITE(LEAF, gTrainerBackPic_Leaf, 0x2800), + TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_BRENDAN, gTrainerBackPic_RubySapphireBrendan, 0x2000), + TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_MAY, gTrainerBackPic_RubySapphireMay, 0x2000), + TRAINER_BACK_SPRITE(WALLY, gTrainerBackPic_Wally, 0x2000), + TRAINER_BACK_SPRITE(STEVEN, gTrainerBackPic_Steven, 0x2000), }; +#define TRAINER_BACK_PAL(trainerPic, pal) [TRAINER_BACK_PIC_##trainerPic] = {pal, TRAINER_BACK_PIC_##trainerPic} + const struct CompressedSpritePalette gTrainerBackPicPaletteTable[] = { TRAINER_BACK_PAL(BRENDAN, gTrainerPalette_Brendan), diff --git a/src/data/trainer_graphics/front_pic_tables.h b/src/data/trainer_graphics/front_pic_tables.h index c3408b4c35..e751f3c1d2 100644 --- a/src/data/trainer_graphics/front_pic_tables.h +++ b/src/data/trainer_graphics/front_pic_tables.h @@ -95,6 +95,8 @@ const struct MonCoords gTrainerFrontPicCoords[] = [TRAINER_PIC_RS_MAY] = {.size = 8, .y_offset = 1}, }; +#define TRAINER_SPRITE(trainerPic, sprite, size) [TRAINER_PIC_##trainerPic] = {sprite, size, TRAINER_PIC_##trainerPic} + const struct CompressedSpriteSheet gTrainerFrontPicTable[] = { TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, 0x800), @@ -192,6 +194,8 @@ const struct CompressedSpriteSheet gTrainerFrontPicTable[] = TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, 0x800), }; +#define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} + const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[] = { TRAINER_PAL(HIKER, gTrainerPalette_Hiker), diff --git a/src/daycare.c b/src/daycare.c index 69043a5139..2a1efefcc8 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -22,7 +22,6 @@ #include "constants/items.h" #include "constants/moves.h" #include "constants/region_map_sections.h" -#include "constants/species.h" // this file's functions static void ClearDaycareMonMail(struct DayCareMail *mail); @@ -548,8 +547,19 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) for (i = 0; i < INHERITED_IV_COUNT; i++) { // Randomly pick an IV from the available list and stop from being chosen again. + // BUG: Instead of removing the IV that was just picked, this + // removes position 0 (HP) then position 1 (DEF), then position 2. This is why HP and DEF + // have a lower chance to be inherited in Emerald and why the IV picked for inheritance can + // be repeated. Amusingly, FRLG and RS also got this wrong. They remove selectedIvs[i], which + // is not an index! This means that it can sometimes remove the wrong stat. + #ifndef BUGFIX selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; RemoveIVIndexFromList(availableIVs, i); + #else + u8 index = Random() % (NUM_STATS - i); + selectedIvs[i] = availableIVs[index]; + RemoveIVIndexFromList(availableIVs, index); + #endif } // Determine which parent each of the selected IVs should inherit from. @@ -615,10 +625,7 @@ static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++) { if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET) - { - // TODO: the curly braces around this if statement are required for a matching build. break; - } eggMoves[i] = gEggMoves[eggMoveIdx + i]; numEggMoves++; @@ -831,7 +838,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation) u8 metLocation; u8 isEgg; - CreateMon(mon, species, EGG_HATCH_LEVEL, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; @@ -858,7 +865,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare * u8 language; personality = daycare->offspringPersonality; - CreateMon(mon, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0); + CreateMon(mon, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); metLevel = 0; ball = ITEM_POKE_BALL; language = LANGUAGE_JAPANESE; @@ -1186,7 +1193,7 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y) printer.y = y; printer.currentX = x; printer.currentY = y; - printer.style = 0; + printer.unk = 0; gTextFlags.useAlternateDownArrow = 0; printer.letterSpacing = 0; printer.lineSpacing = 1; diff --git a/src/decompress.c b/src/decompress.c index c303f214f9..0077533037 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -4,7 +4,6 @@ #include "decompress.h" #include "pokemon.h" #include "text.h" -#include "constants/species.h" EWRAM_DATA ALIGNED(4) u8 gDecompressionBuffer[0x4000] = {0}; diff --git a/src/decoration.c b/src/decoration.c index 22ae327f9e..b97ab43215 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -917,9 +917,9 @@ static void DecorationItemsMenu_PrintDecorationInUse(u8 windowId, s32 itemIndex, if (itemIndex != -2) { if (IsDecorationIndexInSecretBase(itemIndex + 1) == TRUE) - blit_move_info_icon(windowId, 0x18, 0x5c, y + 2); + BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_RED, 92, y + 2); else if (IsDecorationIndexInPlayersRoom(itemIndex + 1) == TRUE) - blit_move_info_icon(windowId, 0x19, 0x5c, y + 2); + BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_BLUE, 92, y + 2); } } @@ -1210,7 +1210,7 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, for (i = 0; i < decWidth; i++) { x = mapX + i; - behavior = GetBehaviorByMetatileId(0x200 + gDecorations[decoration].tiles[j * decWidth + i]); + behavior = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + gDecorations[decoration].tiles[j * decWidth + i]); if (MetatileBehavior_IsSecretBaseImpassable(behavior) == TRUE || (gDecorations[decoration].permission != DECORPERM_PASS_FLOOR && (behavior >> METATILE_ELEVATION_SHIFT))) impassableFlag = METATILE_COLLISION_MASK; else @@ -1224,9 +1224,9 @@ static void ShowDecorationOnMap_(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, elevation = GetDecorationElevation(gDecorations[decoration].id, j * decWidth + i); if (elevation != 0xFFFF) - MapGridSetMetatileEntryAt(x, y, (gDecorations[decoration].tiles[j * decWidth + i] + (0x200 | overlapsWall)) | impassableFlag | elevation); + MapGridSetMetatileEntryAt(x, y, (gDecorations[decoration].tiles[j * decWidth + i] + (NUM_TILES_IN_PRIMARY | overlapsWall)) | impassableFlag | elevation); else - MapGridSetMetatileIdAt(x, y, (gDecorations[decoration].tiles[j * decWidth + i] + (0x200 | overlapsWall)) | impassableFlag); + MapGridSetMetatileIdAt(x, y, (gDecorations[decoration].tiles[j * decWidth + i] + (NUM_TILES_IN_PRIMARY | overlapsWall)) | impassableFlag); } } } @@ -1524,7 +1524,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; + behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; if (!IsFloorOrBoardAndHole(behaviorAt, decoration)) return FALSE; @@ -1545,7 +1545,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; + behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[(mapY - 1 - i) * mapX + j]) & METATILE_ELEVATION_MASK; if (!MetatileBehavior_IsNormal(behaviorAt) && !IsNonBlockNonElevated(behaviorAt, behaviorBy)) return FALSE; @@ -1562,7 +1562,7 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { curX = gTasks[taskId].tCursorX + j; behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[j]) & METATILE_ELEVATION_MASK; + behaviorBy = GetBehaviorByMetatileId(NUM_TILES_IN_PRIMARY + decoration->tiles[j]) & METATILE_ELEVATION_MASK; if (!MetatileBehavior_IsNormal(behaviorAt) && !MetatileBehavior_IsSecretBaseNorthWall(behaviorAt)) return FALSE; @@ -1827,7 +1827,7 @@ static void Task_SelectLocation(u8 taskId) sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].yesFunc(taskId); return; } - + if (tButton == B_BUTTON) { sPlacePutAwayYesNoFunctions[tDecorationItemsMenuCommand].noFunc(taskId); @@ -1971,9 +1971,9 @@ static void SetDecorSelectionMetatiles(struct PlaceDecorationGraphicsDataBuffer u8 shape; shape = data->decoration->shape; - for (i = 0; i < gUnknown_085A71B0[shape].size; i++) + for (i = 0; i < sDecorTilemaps[shape].size; i++) { - data->tiles[gUnknown_085A71B0[shape].tiles[i]] = GetMetatile(data->decoration->tiles[gUnknown_085A71B0[shape].y[i]] * 8 + gUnknown_085A71B0[shape].x[i]); + data->tiles[sDecorTilemaps[shape].tiles[i]] = GetMetatile(data->decoration->tiles[sDecorTilemaps[shape].y[i]] * 8 + sDecorTilemaps[shape].x[i]); } } diff --git a/src/dewford_trend.c b/src/dewford_trend.c index e0063ec1b2..5c7e50f16b 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -219,11 +219,10 @@ void BufferTrendyPhraseString(void) ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1); } - void TrendyPhraseIsOld(void) { - u8 result = 0; - + u16 result = 0; + do { if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 > 1) @@ -234,7 +233,7 @@ void TrendyPhraseIsOld(void) break; result = 1; } while (0); - + gSpecialVar_Result = result; } @@ -249,46 +248,46 @@ static bool8 sub_8122A58(struct EasyChatPair *a, struct EasyChatPair *b, u8 c) { case 0: if (a->unk0_0 > b->unk0_0) - return TRUE; + return 1; if (a->unk0_0 < b->unk0_0) - return FALSE; + return 0; if (a->unk0_7 > b->unk0_7) - return TRUE; + return 1; if (a->unk0_7 < b->unk0_7) - return FALSE; + return 0; break; case 1: if (a->unk0_7 > b->unk0_7) - return TRUE; + return 1; if (a->unk0_7 < b->unk0_7) - return FALSE; + return 0; if (a->unk0_0 > b->unk0_0) - return TRUE; + return 1; if (a->unk0_0 < b->unk0_0) - return FALSE; + return 0; break; case 2: if (a->unk0_0 > b->unk0_0) - return TRUE; + return 1; if (a->unk0_0 < b->unk0_0) - return FALSE; + return 0; if (a->unk0_7 > b->unk0_7) - return TRUE; + return 1; if (a->unk0_7 < b->unk0_7) - return FALSE; + return 0; if (a->unk2 > b->unk2) - return TRUE; + return 1; if (a->unk2 < b->unk2) - return FALSE; + return 0; if (a->words[0] > b->words[0]) - return TRUE; + return 1; if (a->words[0] < b->words[0]) - return FALSE; + return 0; if (a->words[1] > b->words[1]) - return TRUE; + return 1; if (a->words[1] < b->words[1]) - return FALSE; - return TRUE; + return 0; + return 1; } return Random() & 1; } diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 9cbc73c73e..66eacc5f92 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -24,7 +24,6 @@ #include "window.h" #include "constants/items.h" #include "constants/songs.h" -#include "constants/species.h" struct DodrioSubstruct_0160 { diff --git a/src/easy_chat.c b/src/easy_chat.c index e08f0bb75c..2590eea1a3 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -32,7 +32,6 @@ #include "constants/lilycove_lady.h" #include "constants/mauville_old_man.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/rgb.h" #define EZCHAT_TASK_STATE 0 @@ -1614,26 +1613,26 @@ static u16 sub_811ACDC(void) { return sub_811B150(); } - if (JOY_NEW(START_BUTTON)) + else if (JOY_NEW(START_BUTTON)) { return sub_811B1B4(); } - if (JOY_NEW(DPAD_UP)) + else if (JOY_NEW(DPAD_UP)) { sEasyChatScreen->mainCursorRow--; break; } - if (JOY_NEW(DPAD_LEFT)) + else if (JOY_NEW(DPAD_LEFT)) { sEasyChatScreen->mainCursorColumn--; break; } - if (JOY_NEW(DPAD_DOWN)) + else if (JOY_NEW(DPAD_DOWN)) { sEasyChatScreen->mainCursorRow = 0; break; } - if (JOY_NEW(DPAD_RIGHT)) + else if (JOY_NEW(DPAD_RIGHT)) { sEasyChatScreen->mainCursorColumn++; break; @@ -2537,7 +2536,7 @@ u8 sub_811BBBC(void) return sEasyChatScreen->unk_0c; } -static void sub_811BBC8(s8 *arg0, s8 *arg1) +void sub_811BBC8(u8 *arg0, u8 *arg1) { *arg0 = sEasyChatScreen->unk_10; *arg1 = sEasyChatScreen->unk_11; @@ -4529,18 +4528,18 @@ static void sub_811E30C(void) x = var0 * 13; x = x * 8 + 28; y = var1 * 16 + 96; - sub_811E34C((u8)x, (u8)y); + sub_811E34C(x, y); } static void sub_811E34C(u8 x, u8 y) { - if (!sUnknown_0203A11C->unk2E4) - return; - - sUnknown_0203A11C->unk2E4->pos1.x = (s16)x; - sUnknown_0203A11C->unk2E4->pos1.y = (s16)y; - sUnknown_0203A11C->unk2E4->pos2.x = 0; - sUnknown_0203A11C->unk2E4->data[0] = 0; + if (sUnknown_0203A11C->unk2E4) + { + sUnknown_0203A11C->unk2E4->pos1.x = x; + sUnknown_0203A11C->unk2E4->pos1.y = y; + sUnknown_0203A11C->unk2E4->pos2.x = 0; + sUnknown_0203A11C->unk2E4->data[0] = 0; + } } static void sub_811E380(void) diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 87f0a13fd5..4e050ce62b 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -322,7 +322,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) pokerus = GetMonData(egg, MON_DATA_POKERUS); obedience = GetMonData(egg, MON_DATA_OBEDIENCE); - CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0); + CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); for (i = 0; i < MAX_MON_MOVES; i++) { @@ -434,7 +434,7 @@ static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc u16 species = GetMonData(mon, MON_DATA_SPECIES); u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->sprites[(a0 * 2) + 1], + gMonSpritesGfxPtr->sprites.ptr [(a0 * 2) + 1], species, pid); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); *speciesLoc = species; diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index bdfbebf6b1..944d1d7289 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -12,7 +12,6 @@ #include "trainer_hill.h" #include "constants/easy_chat.h" #include "constants/trainers.h" -#include "constants/species.h" #include "constants/moves.h" #include "constants/items.h" diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 68f873446c..12ef4acdc0 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -401,42 +401,43 @@ const u8 gInitialMovementTypeFacingDirections[] = { [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = DIR_EAST, }; -#define OBJ_EVENT_PAL_TAG_0 0x1103 -#define OBJ_EVENT_PAL_TAG_1 0x1104 -#define OBJ_EVENT_PAL_TAG_2 0x1105 -#define OBJ_EVENT_PAL_TAG_3 0x1106 -#define OBJ_EVENT_PAL_TAG_4 0x1107 -#define OBJ_EVENT_PAL_TAG_5 0x1108 -#define OBJ_EVENT_PAL_TAG_6 0x1109 -#define OBJ_EVENT_PAL_TAG_7 0x110A -#define OBJ_EVENT_PAL_TAG_8 0x1100 -#define OBJ_EVENT_PAL_TAG_9 0x1101 -#define OBJ_EVENT_PAL_TAG_10 0x1102 -#define OBJ_EVENT_PAL_TAG_11 0x1115 -#define OBJ_EVENT_PAL_TAG_12 0x110B -#define OBJ_EVENT_PAL_TAG_13 0x110C -#define OBJ_EVENT_PAL_TAG_14 0x110D -#define OBJ_EVENT_PAL_TAG_15 0x110E -#define OBJ_EVENT_PAL_TAG_16 0x110F -#define OBJ_EVENT_PAL_TAG_17 0x1110 -#define OBJ_EVENT_PAL_TAG_18 0x1111 -#define OBJ_EVENT_PAL_TAG_19 0x1112 -#define OBJ_EVENT_PAL_TAG_20 0x1113 -#define OBJ_EVENT_PAL_TAG_21 0x1114 -#define OBJ_EVENT_PAL_TAG_22 0x1116 -#define OBJ_EVENT_PAL_TAG_23 0x1117 -#define OBJ_EVENT_PAL_TAG_24 0x1118 -#define OBJ_EVENT_PAL_TAG_25 0x1119 -#define OBJ_EVENT_PAL_TAG_26 0x111B -#define OBJ_EVENT_PAL_TAG_27 0x111C -#define OBJ_EVENT_PAL_TAG_28 0x111D -#define OBJ_EVENT_PAL_TAG_29 0x111E -#define OBJ_EVENT_PAL_TAG_30 0x111F -#define OBJ_EVENT_PAL_TAG_31 0x1120 -#define OBJ_EVENT_PAL_TAG_32 0x1121 -#define OBJ_EVENT_PAL_TAG_33 0x1122 -#define OBJ_EVENT_PAL_TAG_34 0x1123 -#define OBJ_EVENT_PAL_TAG_NONE 0x11FF +#define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100 +#define OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION 0x1101 +#define OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION 0x1102 +#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103 +#define OBJ_EVENT_PAL_TAG_NPC_2 0x1104 +#define OBJ_EVENT_PAL_TAG_NPC_3 0x1105 +#define OBJ_EVENT_PAL_TAG_NPC_4 0x1106 +#define OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION 0x1107 +#define OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION 0x1108 +#define OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION 0x1109 +#define OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION 0x110A +#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP 0x110B +#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION 0x110C +#define OBJ_EVENT_PAL_TAG_TRUCK 0x110D +#define OBJ_EVENT_PAL_TAG_VIGOROTH 0x110E +#define OBJ_EVENT_PAL_TAG_ZIGZAGOON 0x110F +#define OBJ_EVENT_PAL_TAG_MAY 0x1110 +#define OBJ_EVENT_PAL_TAG_MAY_REFLECTION 0x1111 +#define OBJ_EVENT_PAL_TAG_MOVING_BOX 0x1112 +#define OBJ_EVENT_PAL_TAG_CABLE_CAR 0x1113 +#define OBJ_EVENT_PAL_TAG_SSTIDAL 0x1114 +#define OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER 0x1115 +#define OBJ_EVENT_PAL_TAG_KYOGRE 0x1116 +#define OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION 0x1117 +#define OBJ_EVENT_PAL_TAG_GROUDON 0x1118 +#define OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION 0x1119 +#define OBJ_EVENT_PAL_TAG_UNUSED 0x111A +#define OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW 0x111B +#define OBJ_EVENT_PAL_TAG_POOCHYENA 0x111C +#define OBJ_EVENT_PAL_TAG_RED_LEAF 0x111D +#define OBJ_EVENT_PAL_TAG_DEOXYS 0x111E +#define OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE 0x111F +#define OBJ_EVENT_PAL_TAG_HO_OH 0x1120 +#define OBJ_EVENT_PAL_TAG_LUGIA 0x1121 +#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122 +#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123 +#define OBJ_EVENT_PAL_TAG_NONE 0x11FF #include "data/object_events/object_event_graphics_info_pointers.h" #include "data/field_effects/field_effect_object_template_pointers.h" @@ -446,224 +447,224 @@ const u8 gInitialMovementTypeFacingDirections[] = { #include "data/object_events/object_event_subsprites.h" #include "data/object_events/object_event_graphics_info.h" -const struct SpritePalette sObjectEventSpritePalettes[] = { - {gObjectEventPalette0, OBJ_EVENT_PAL_TAG_0}, - {gObjectEventPalette1, OBJ_EVENT_PAL_TAG_1}, - {gObjectEventPalette2, OBJ_EVENT_PAL_TAG_2}, - {gObjectEventPalette3, OBJ_EVENT_PAL_TAG_3}, - {gObjectEventPalette4, OBJ_EVENT_PAL_TAG_4}, - {gObjectEventPalette5, OBJ_EVENT_PAL_TAG_5}, - {gObjectEventPalette6, OBJ_EVENT_PAL_TAG_6}, - {gObjectEventPalette7, OBJ_EVENT_PAL_TAG_7}, - {gObjectEventPalette8, OBJ_EVENT_PAL_TAG_8}, - {gObjectEventPalette9, OBJ_EVENT_PAL_TAG_9}, - {gObjectEventPalette10, OBJ_EVENT_PAL_TAG_10}, - {gObjectEventPalette11, OBJ_EVENT_PAL_TAG_11}, - {gObjectEventPalette12, OBJ_EVENT_PAL_TAG_12}, - {gObjectEventPalette13, OBJ_EVENT_PAL_TAG_13}, - {gObjectEventPalette14, OBJ_EVENT_PAL_TAG_14}, - {gObjectEventPalette15, OBJ_EVENT_PAL_TAG_15}, - {gObjectEventPalette16, OBJ_EVENT_PAL_TAG_16}, - {gObjectEventPalette17, OBJ_EVENT_PAL_TAG_17}, - {gObjectEventPalette18, OBJ_EVENT_PAL_TAG_18}, - {gObjectEventPalette19, OBJ_EVENT_PAL_TAG_19}, - {gObjectEventPalette20, OBJ_EVENT_PAL_TAG_20}, - {gObjectEventPalette21, OBJ_EVENT_PAL_TAG_21}, - {gObjectEventPalette22, OBJ_EVENT_PAL_TAG_22}, - {gObjectEventPalette23, OBJ_EVENT_PAL_TAG_23}, - {gObjectEventPalette24, OBJ_EVENT_PAL_TAG_24}, - {gObjectEventPalette25, OBJ_EVENT_PAL_TAG_25}, - {gObjectEventPalette26, OBJ_EVENT_PAL_TAG_26}, - {gObjectEventPalette27, OBJ_EVENT_PAL_TAG_27}, - {gObjectEventPalette28, OBJ_EVENT_PAL_TAG_28}, - {gObjectEventPalette29, OBJ_EVENT_PAL_TAG_29}, - {gObjectEventPalette30, OBJ_EVENT_PAL_TAG_30}, - {gObjectEventPalette31, OBJ_EVENT_PAL_TAG_31}, - {gObjectEventPalette32, OBJ_EVENT_PAL_TAG_32}, - {gObjectEventPalette33, OBJ_EVENT_PAL_TAG_33}, - {gObjectEventPalette34, OBJ_EVENT_PAL_TAG_34}, - {NULL, 0x0000}, +static const struct SpritePalette sObjectEventSpritePalettes[] = { + {gObjectEventPal_Npc1, OBJ_EVENT_PAL_TAG_NPC_1}, + {gObjectEventPal_Npc2, OBJ_EVENT_PAL_TAG_NPC_2}, + {gObjectEventPal_Npc3, OBJ_EVENT_PAL_TAG_NPC_3}, + {gObjectEventPal_Npc4, OBJ_EVENT_PAL_TAG_NPC_4}, + {gObjectEventPal_Npc1Reflection, OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION}, + {gObjectEventPal_Npc2Reflection, OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION}, + {gObjectEventPal_Npc3Reflection, OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION}, + {gObjectEventPal_Npc4Reflection, OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION}, + {gObjectEventPal_Brendan, OBJ_EVENT_PAL_TAG_BRENDAN}, + {gObjectEventPal_BrendanReflection, OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION}, + {gObjectEventPal_BridgeReflection, OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION}, + {gObjectEventPal_PlayerUnderwater, OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER}, + {gObjectEventPal_QuintyPlump, OBJ_EVENT_PAL_TAG_QUINTY_PLUMP}, + {gObjectEventPal_QuintyPlumpReflection, OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION}, + {gObjectEventPal_Truck, OBJ_EVENT_PAL_TAG_TRUCK}, + {gObjectEventPal_Vigoroth, OBJ_EVENT_PAL_TAG_VIGOROTH}, + {gObjectEventPal_EnemyZigzagoon, OBJ_EVENT_PAL_TAG_ZIGZAGOON}, + {gObjectEventPal_May, OBJ_EVENT_PAL_TAG_MAY}, + {gObjectEventPal_MayReflection, OBJ_EVENT_PAL_TAG_MAY_REFLECTION}, + {gObjectEventPal_MovingBox, OBJ_EVENT_PAL_TAG_MOVING_BOX}, + {gObjectEventPal_CableCar, OBJ_EVENT_PAL_TAG_CABLE_CAR}, + {gObjectEventPal_SSTidal, OBJ_EVENT_PAL_TAG_SSTIDAL}, + {gObjectEventPal_Kyogre, OBJ_EVENT_PAL_TAG_KYOGRE}, + {gObjectEventPal_KyogreReflection, OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION}, + {gObjectEventPal_Groudon, OBJ_EVENT_PAL_TAG_GROUDON}, + {gObjectEventPal_GroudonReflection, OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION}, + {gObjectEventPal_SubmarineShadow, OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW}, + {gObjectEventPal_Poochyena, OBJ_EVENT_PAL_TAG_POOCHYENA}, + {gObjectEventPal_RedLeaf, OBJ_EVENT_PAL_TAG_RED_LEAF}, + {gObjectEventPal_Deoxys, OBJ_EVENT_PAL_TAG_DEOXYS}, + {gObjectEventPal_BirthIslandStone, OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE}, + {gObjectEventPal_HoOh, OBJ_EVENT_PAL_TAG_HO_OH}, + {gObjectEventPal_Lugia, OBJ_EVENT_PAL_TAG_LUGIA}, + {gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN}, + {gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY}, + {NULL, 0x0000}, }; -const u16 gPlayerReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_9, +static const u16 sReflectionPaletteTags_Brendan[] = { + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, }; -const u16 Unknown_0850BCF0[] = { - OBJ_EVENT_PAL_TAG_18, - OBJ_EVENT_PAL_TAG_18, - OBJ_EVENT_PAL_TAG_18, - OBJ_EVENT_PAL_TAG_18, +static const u16 sReflectionPaletteTags_May[] = { + OBJ_EVENT_PAL_TAG_MAY_REFLECTION, + OBJ_EVENT_PAL_TAG_MAY_REFLECTION, + OBJ_EVENT_PAL_TAG_MAY_REFLECTION, + OBJ_EVENT_PAL_TAG_MAY_REFLECTION, }; -const u16 gPlayerUnderwaterReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_11, - OBJ_EVENT_PAL_TAG_11, - OBJ_EVENT_PAL_TAG_11, - OBJ_EVENT_PAL_TAG_11, +static const u16 sReflectionPaletteTags_PlayerUnderwater[] = { + OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, + OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, + OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, + OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, }; -const struct PairedPalettes gPlayerReflectionPaletteSets[] = { - {OBJ_EVENT_PAL_TAG_8, gPlayerReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_17, Unknown_0850BCF0}, - {OBJ_EVENT_PAL_TAG_11, gPlayerUnderwaterReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_NONE, NULL}, +static const struct PairedPalettes sPlayerReflectionPaletteSets[] = { + {OBJ_EVENT_PAL_TAG_BRENDAN, sReflectionPaletteTags_Brendan}, + {OBJ_EVENT_PAL_TAG_MAY, sReflectionPaletteTags_May}, + {OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER, sReflectionPaletteTags_PlayerUnderwater}, + {OBJ_EVENT_PAL_TAG_NONE, NULL}, }; -const u16 gQuintyPlumpReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_13, - OBJ_EVENT_PAL_TAG_13, - OBJ_EVENT_PAL_TAG_13, - OBJ_EVENT_PAL_TAG_13, +static const u16 sReflectionPaletteTags_QuintyPlump[] = { + OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION, + OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION, + OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION, + OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION, }; -const u16 gTruckReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_14, - OBJ_EVENT_PAL_TAG_14, - OBJ_EVENT_PAL_TAG_14, - OBJ_EVENT_PAL_TAG_14, +static const u16 sReflectionPaletteTags_Truck[] = { + OBJ_EVENT_PAL_TAG_TRUCK, + OBJ_EVENT_PAL_TAG_TRUCK, + OBJ_EVENT_PAL_TAG_TRUCK, + OBJ_EVENT_PAL_TAG_TRUCK, }; -const u16 gVigorothMoverReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_15, - OBJ_EVENT_PAL_TAG_15, - OBJ_EVENT_PAL_TAG_15, - OBJ_EVENT_PAL_TAG_15, +static const u16 sReflectionPaletteTags_VigorothMover[] = { + OBJ_EVENT_PAL_TAG_VIGOROTH, + OBJ_EVENT_PAL_TAG_VIGOROTH, + OBJ_EVENT_PAL_TAG_VIGOROTH, + OBJ_EVENT_PAL_TAG_VIGOROTH, }; -const u16 gMovingBoxReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_19, - OBJ_EVENT_PAL_TAG_19, - OBJ_EVENT_PAL_TAG_19, - OBJ_EVENT_PAL_TAG_19, +static const u16 sReflectionPaletteTags_MovingBox[] = { + OBJ_EVENT_PAL_TAG_MOVING_BOX, + OBJ_EVENT_PAL_TAG_MOVING_BOX, + OBJ_EVENT_PAL_TAG_MOVING_BOX, + OBJ_EVENT_PAL_TAG_MOVING_BOX, }; -const u16 gCableCarReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_20, - OBJ_EVENT_PAL_TAG_20, - OBJ_EVENT_PAL_TAG_20, - OBJ_EVENT_PAL_TAG_20, +static const u16 sReflectionPaletteTags_CableCar[] = { + OBJ_EVENT_PAL_TAG_CABLE_CAR, + OBJ_EVENT_PAL_TAG_CABLE_CAR, + OBJ_EVENT_PAL_TAG_CABLE_CAR, + OBJ_EVENT_PAL_TAG_CABLE_CAR, }; -const u16 gSSTidalReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_21, - OBJ_EVENT_PAL_TAG_21, - OBJ_EVENT_PAL_TAG_21, - OBJ_EVENT_PAL_TAG_21, +static const u16 sReflectionPaletteTags_SSTidal[] = { + OBJ_EVENT_PAL_TAG_SSTIDAL, + OBJ_EVENT_PAL_TAG_SSTIDAL, + OBJ_EVENT_PAL_TAG_SSTIDAL, + OBJ_EVENT_PAL_TAG_SSTIDAL, }; -const u16 gSubmarineShadowReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_26, - OBJ_EVENT_PAL_TAG_26, - OBJ_EVENT_PAL_TAG_26, - OBJ_EVENT_PAL_TAG_26, +static const u16 sReflectionPaletteTags_SubmarineShadow[] = { + OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, + OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, + OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, + OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, }; -const u16 Unknown_0850BD58[] = { // Kyogre2? - OBJ_EVENT_PAL_TAG_23, - OBJ_EVENT_PAL_TAG_23, - OBJ_EVENT_PAL_TAG_23, - OBJ_EVENT_PAL_TAG_23, +static const u16 sReflectionPaletteTags_Kyogre[] = { + OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION, + OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION, + OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION, + OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION, }; -const u16 Unknown_0850BD60[] = { // Groudon2? - OBJ_EVENT_PAL_TAG_25, - OBJ_EVENT_PAL_TAG_25, - OBJ_EVENT_PAL_TAG_25, - OBJ_EVENT_PAL_TAG_25, +static const u16 sReflectionPaletteTags_Groudon[] = { + OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION, + OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION, + OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION, + OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION, }; -const u16 Unknown_0850BD68[] = { // Invisible Keckleon? - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_6, +static const u16 sReflectionPaletteTags_Npc3[] = { // Only used by the Route 120 bridge Kecleon + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, }; -const u16 gRedLeafReflectionPaletteTags[] = { - OBJ_EVENT_PAL_TAG_28, - OBJ_EVENT_PAL_TAG_28, - OBJ_EVENT_PAL_TAG_28, - OBJ_EVENT_PAL_TAG_28, +static const u16 sReflectionPaletteTags_RedLeaf[] = { + OBJ_EVENT_PAL_TAG_RED_LEAF, + OBJ_EVENT_PAL_TAG_RED_LEAF, + OBJ_EVENT_PAL_TAG_RED_LEAF, + OBJ_EVENT_PAL_TAG_RED_LEAF, }; -const struct PairedPalettes gSpecialObjectReflectionPaletteSets[] = { - {OBJ_EVENT_PAL_TAG_8, gPlayerReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_17, Unknown_0850BCF0}, - {OBJ_EVENT_PAL_TAG_12, gQuintyPlumpReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_14, gTruckReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_15, gVigorothMoverReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_19, gMovingBoxReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_20, gCableCarReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_21, gSSTidalReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_22, Unknown_0850BD58}, - {OBJ_EVENT_PAL_TAG_24, Unknown_0850BD60}, - {OBJ_EVENT_PAL_TAG_2, Unknown_0850BD68}, - {OBJ_EVENT_PAL_TAG_26, gSubmarineShadowReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_28, gRedLeafReflectionPaletteTags}, - {OBJ_EVENT_PAL_TAG_NONE, NULL}, +static const struct PairedPalettes sSpecialObjectReflectionPaletteSets[] = { + {OBJ_EVENT_PAL_TAG_BRENDAN, sReflectionPaletteTags_Brendan}, + {OBJ_EVENT_PAL_TAG_MAY, sReflectionPaletteTags_May}, + {OBJ_EVENT_PAL_TAG_QUINTY_PLUMP, sReflectionPaletteTags_QuintyPlump}, + {OBJ_EVENT_PAL_TAG_TRUCK, sReflectionPaletteTags_Truck}, + {OBJ_EVENT_PAL_TAG_VIGOROTH, sReflectionPaletteTags_VigorothMover}, + {OBJ_EVENT_PAL_TAG_MOVING_BOX, sReflectionPaletteTags_MovingBox}, + {OBJ_EVENT_PAL_TAG_CABLE_CAR, sReflectionPaletteTags_CableCar}, + {OBJ_EVENT_PAL_TAG_SSTIDAL, sReflectionPaletteTags_SSTidal}, + {OBJ_EVENT_PAL_TAG_KYOGRE, sReflectionPaletteTags_Kyogre}, + {OBJ_EVENT_PAL_TAG_GROUDON, sReflectionPaletteTags_Groudon}, + {OBJ_EVENT_PAL_TAG_NPC_3, sReflectionPaletteTags_Npc3}, + {OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW, sReflectionPaletteTags_SubmarineShadow}, + {OBJ_EVENT_PAL_TAG_RED_LEAF, sReflectionPaletteTags_RedLeaf}, + {OBJ_EVENT_PAL_TAG_NONE, NULL}, }; -const u16 gObjectPaletteTags0[] = { - OBJ_EVENT_PAL_TAG_8, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_0, - OBJ_EVENT_PAL_TAG_1, - OBJ_EVENT_PAL_TAG_2, - OBJ_EVENT_PAL_TAG_3, - OBJ_EVENT_PAL_TAG_4, - OBJ_EVENT_PAL_TAG_5, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_7, +static const u16 sObjectPaletteTags0[] = { + OBJ_EVENT_PAL_TAG_BRENDAN, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_1, + OBJ_EVENT_PAL_TAG_NPC_2, + OBJ_EVENT_PAL_TAG_NPC_3, + OBJ_EVENT_PAL_TAG_NPC_4, + OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION, }; -const u16 gObjectPaletteTags1[] = { - OBJ_EVENT_PAL_TAG_8, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_0, - OBJ_EVENT_PAL_TAG_1, - OBJ_EVENT_PAL_TAG_2, - OBJ_EVENT_PAL_TAG_3, - OBJ_EVENT_PAL_TAG_4, - OBJ_EVENT_PAL_TAG_5, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_7, +static const u16 sObjectPaletteTags1[] = { + OBJ_EVENT_PAL_TAG_BRENDAN, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_1, + OBJ_EVENT_PAL_TAG_NPC_2, + OBJ_EVENT_PAL_TAG_NPC_3, + OBJ_EVENT_PAL_TAG_NPC_4, + OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION, }; -const u16 gObjectPaletteTags2[] = { - OBJ_EVENT_PAL_TAG_8, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_0, - OBJ_EVENT_PAL_TAG_1, - OBJ_EVENT_PAL_TAG_2, - OBJ_EVENT_PAL_TAG_3, - OBJ_EVENT_PAL_TAG_4, - OBJ_EVENT_PAL_TAG_5, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_7, +static const u16 sObjectPaletteTags2[] = { + OBJ_EVENT_PAL_TAG_BRENDAN, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_1, + OBJ_EVENT_PAL_TAG_NPC_2, + OBJ_EVENT_PAL_TAG_NPC_3, + OBJ_EVENT_PAL_TAG_NPC_4, + OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION, }; -const u16 gObjectPaletteTags3[] = { - OBJ_EVENT_PAL_TAG_8, - OBJ_EVENT_PAL_TAG_9, - OBJ_EVENT_PAL_TAG_0, - OBJ_EVENT_PAL_TAG_1, - OBJ_EVENT_PAL_TAG_2, - OBJ_EVENT_PAL_TAG_3, - OBJ_EVENT_PAL_TAG_4, - OBJ_EVENT_PAL_TAG_5, - OBJ_EVENT_PAL_TAG_6, - OBJ_EVENT_PAL_TAG_7, +static const u16 sObjectPaletteTags3[] = { + OBJ_EVENT_PAL_TAG_BRENDAN, + OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_1, + OBJ_EVENT_PAL_TAG_NPC_2, + OBJ_EVENT_PAL_TAG_NPC_3, + OBJ_EVENT_PAL_TAG_NPC_4, + OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION, + OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION, }; -const u16 *const gObjectPaletteTagSets[] = { - gObjectPaletteTags0, - gObjectPaletteTags1, - gObjectPaletteTags2, - gObjectPaletteTags3, +static const u16 *const sObjectPaletteTagSets[] = { + sObjectPaletteTags0, + sObjectPaletteTags1, + sObjectPaletteTags2, + sObjectPaletteTags3, }; #include "data/object_events/berry_tree_graphics_tables.h" @@ -1232,23 +1233,23 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, objectEvent->previousCoords.y = y; objectEvent->currentElevation = template->elevation; objectEvent->previousElevation = template->elevation; - objectEvent->range.as_nybbles.x = template->movementRangeX; - objectEvent->range.as_nybbles.y = template->movementRangeY; + objectEvent->rangeX = template->movementRangeX; + objectEvent->rangeY = template->movementRangeY; objectEvent->trainerType = template->trainerType; - objectEvent->mapNum = mapNum; //redundant, but needed to match + objectEvent->mapNum = mapNum; objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType]; SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); SetObjectEventDynamicGraphicsId(objectEvent); if (gRangedMovementTypes[objectEvent->movementType]) { - if (objectEvent->range.as_nybbles.x == 0) + if (objectEvent->rangeX == 0) { - objectEvent->range.as_nybbles.x++; + objectEvent->rangeX++; } - if (objectEvent->range.as_nybbles.y == 0) + if (objectEvent->rangeY == 0) { - objectEvent->range.as_nybbles.y++; + objectEvent->rangeY++; } } return objectEventId; @@ -1295,22 +1296,19 @@ static bool8 GetAvailableObjectEventId(u16 localId, u8 mapNum, u8 mapGroup, u8 * { u8 i = 0; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + for (i = 0; i < OBJECT_EVENTS_COUNT && gObjectEvents[i].active; i++) { - if (!gObjectEvents[i].active) - break; if (gObjectEvents[i].localId == localId && gObjectEvents[i].mapNum == mapNum && gObjectEvents[i].mapGroup == mapGroup) return TRUE; } if (i >= OBJECT_EVENTS_COUNT) return TRUE; *objectEventId = i; - do + for (; i < OBJECT_EVENTS_COUNT; i++) { if (gObjectEvents[i].active && gObjectEvents[i].localId == localId && gObjectEvents[i].mapNum == mapNum && gObjectEvents[i].mapGroup == mapGroup) return TRUE; - i++; - } while (i < OBJECT_EVENTS_COUNT); + } return FALSE; } @@ -1367,16 +1365,16 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl paletteSlot = graphicsInfo->paletteSlot; if (paletteSlot == 0) { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, 0); + LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, 0); } else if (paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, 10); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, 10); } else if (paletteSlot >= 16) { paletteSlot -= 16; - sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); + sub_808EAB0(graphicsInfo->paletteTag, paletteSlot); } if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE) @@ -1479,7 +1477,7 @@ static void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void ( const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); spriteTemplate->tileTag = graphicsInfo->tileTag; - spriteTemplate->paletteTag = graphicsInfo->paletteTag1; + spriteTemplate->paletteTag = graphicsInfo->paletteTag; spriteTemplate->oam = graphicsInfo->oam; spriteTemplate->anims = graphicsInfo->anims; spriteTemplate->images = graphicsInfo->images; @@ -1556,11 +1554,11 @@ u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction) sprite->data[1] = z; if (graphicsInfo->paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (graphicsInfo->paletteSlot >= 16) { - sub_808EAB0(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot | 0xf0); + sub_808EAB0(graphicsInfo->paletteTag, graphicsInfo->paletteSlot | 0xf0); } if (subspriteTables != NULL) { @@ -1696,16 +1694,16 @@ static void sub_808E1B8(u8 objectEventId, s16 x, s16 y) paletteSlot = graphicsInfo->paletteSlot; if (paletteSlot == 0) { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (paletteSlot >= 16) { paletteSlot -= 16; - sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); + sub_808EAB0(graphicsInfo->paletteTag, paletteSlot); } *(u16 *)&spriteTemplate.paletteTag = 0xFFFF; spriteId = CreateSprite(&spriteTemplate, 0, 0, 0); @@ -1772,16 +1770,16 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) paletteSlot = graphicsInfo->paletteSlot; if (paletteSlot == 0) { - PatchObjectPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); } else if (paletteSlot >= 16) { paletteSlot -= 16; - sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); + sub_808EAB0(graphicsInfo->paletteTag, paletteSlot); } sprite->oam.shape = graphicsInfo->oam->shape; sprite->oam.size = graphicsInfo->oam->size; @@ -2033,11 +2031,11 @@ void LoadPlayerObjectReflectionPalette(u16 tag, u8 slot) u8 i; PatchObjectPalette(tag, slot); - for (i = 0; gPlayerReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) + for (i = 0; sPlayerReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { - if (gPlayerReflectionPaletteSets[i].tag == tag) + if (sPlayerReflectionPaletteSets[i].tag == tag) { - PatchObjectPalette(gPlayerReflectionPaletteSets[i].data[sCurrentReflectionType], gReflectionEffectPaletteMap[slot]); + PatchObjectPalette(sPlayerReflectionPaletteSets[i].data[sCurrentReflectionType], gReflectionEffectPaletteMap[slot]); return; } } @@ -2049,11 +2047,11 @@ void LoadSpecialObjectReflectionPalette(u16 tag, u8 slot) sCurrentSpecialObjectPaletteTag = tag; PatchObjectPalette(tag, slot); - for (i = 0; gSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) + for (i = 0; sSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { - if (gSpecialObjectReflectionPaletteSets[i].tag == tag) + if (sSpecialObjectReflectionPaletteSets[i].tag == tag) { - PatchObjectPalette(gSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType], gReflectionEffectPaletteMap[slot]); + PatchObjectPalette(sSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType], gReflectionEffectPaletteMap[slot]); return; } } @@ -2277,7 +2275,18 @@ u8 CameraObjectGetFollowedObjectId(void) void CameraObjectReset2(void) { + // UB: Possible null dereference +#ifdef UBFIX + struct Sprite *cameraObject; + + cameraObject = FindCameraObject(); + if (cameraObject != NULL) + { + cameraObject->data[1] = 2; + } +#else FindCameraObject()->data[1] = 2; +#endif // UBFIX } u8 CopySprite(struct Sprite *sprite, s16 x, s16 y, u8 subpriority) @@ -2504,12 +2513,12 @@ void InitObjectEventPalettes(u8 palSlot) sCurrentReflectionType = palSlot; if (palSlot == 1) { - PatchObjectPaletteRange(gObjectPaletteTagSets[sCurrentReflectionType], 0, 6); + PatchObjectPaletteRange(sObjectPaletteTagSets[sCurrentReflectionType], 0, 6); gReservedSpritePaletteCount = 8; } else { - PatchObjectPaletteRange(gObjectPaletteTagSets[sCurrentReflectionType], 0, 10); + PatchObjectPaletteRange(sObjectPaletteTagSets[sCurrentReflectionType], 0, 10); } } @@ -2519,13 +2528,13 @@ u16 GetObjectPaletteTag(u8 palSlot) if (palSlot < 10) { - return gObjectPaletteTagSets[sCurrentReflectionType][palSlot]; + return sObjectPaletteTagSets[sCurrentReflectionType][palSlot]; } - for (i = 0; gSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) + for (i = 0; sSpecialObjectReflectionPaletteSets[i].tag != OBJ_EVENT_PAL_TAG_NONE; i++) { - if (gSpecialObjectReflectionPaletteSets[i].tag == sCurrentSpecialObjectPaletteTag) + if (sSpecialObjectReflectionPaletteSets[i].tag == sCurrentSpecialObjectPaletteTag) { - return gSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType]; + return sSpecialObjectReflectionPaletteSets[i].data[sCurrentReflectionType]; } } return OBJ_EVENT_PAL_TAG_NONE; @@ -4758,19 +4767,19 @@ static bool8 IsCoordOutsideObjectEventMovementRange(struct ObjectEvent *objectEv s16 top; s16 bottom; - if (objectEvent->range.as_nybbles.x != 0) + if (objectEvent->rangeX != 0) { - left = objectEvent->initialCoords.x - objectEvent->range.as_nybbles.x; - right = objectEvent->initialCoords.x + objectEvent->range.as_nybbles.x; + left = objectEvent->initialCoords.x - objectEvent->rangeX; + right = objectEvent->initialCoords.x + objectEvent->rangeX; if (left > x || right < x) { return TRUE; } } - if (objectEvent->range.as_nybbles.y != 0) + if (objectEvent->rangeY != 0) { - top = objectEvent->initialCoords.y - objectEvent->range.as_nybbles.y; - bottom = objectEvent->initialCoords.y + objectEvent->range.as_nybbles.y; + top = objectEvent->initialCoords.y - objectEvent->rangeY; + bottom = objectEvent->initialCoords.y + objectEvent->rangeY; if (top > y || bottom < y) { return TRUE; @@ -8216,13 +8225,15 @@ bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent) { return TRUE; } - - objectEvent->frozen = 1; - objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused; - objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused; - gSprites[objectEvent->spriteId].animPaused = 1; - gSprites[objectEvent->spriteId].affineAnimPaused = 1; - return FALSE; + else + { + objectEvent->frozen = 1; + objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused; + objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused; + gSprites[objectEvent->spriteId].animPaused = 1; + gSprites[objectEvent->spriteId].affineAnimPaused = 1; + return FALSE; + } } void FreezeObjectEvents(void) @@ -8395,8 +8406,8 @@ bool8 sub_80976EC(struct Sprite *sprite) if (sprite->data[5] > 15) return TRUE; - - return FALSE; + else + return FALSE; } static const s8 sFigure8XOffsets[FIGURE_8_LENGTH] = { @@ -8476,15 +8487,15 @@ static bool8 AnimateSpriteInFigure8(struct Sprite *sprite) return finished; } -static const s8 gUnknown_0850E802[16] = { +static const s8 gUnknown_0850E802[] = { -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0 }; -static const s8 gUnknown_0850E812[16] = { +static const s8 gUnknown_0850E812[] = { 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0 }; -static const s8 gUnknown_0850E822[16] = { +static const s8 gUnknown_0850E822[] = { -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0 }; @@ -8564,9 +8575,12 @@ static void SetMovementDelay(struct Sprite *sprite, s16 timer) static bool8 WaitForMovementDelay(struct Sprite *sprite) { - if (--sprite->data[3] == 0) + sprite->data[3]--; + + if (sprite->data[3] == 0) return TRUE; - return FALSE; + else + return FALSE; } void SetAndStartSpriteAnim(struct Sprite *sprite, u8 animNum, u8 animCmdIndex) @@ -8580,7 +8594,8 @@ bool8 SpriteAnimEnded(struct Sprite *sprite) { if (sprite->animEnded) return TRUE; - return FALSE; + else + return FALSE; } void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible) @@ -8759,14 +8774,14 @@ static void UpdateObjectEventSpritePosition(struct Sprite *sprite) { switch(sprite->tAnimNum) { - case 0: - break; case UNION_ROOM_SPAWN_IN: MoveUnionRoomObjectDown(sprite); break; case UNION_ROOM_SPAWN_OUT: MoveUnionRoomObjectUp(sprite); break; + case 0: + break; default: sprite->tAnimNum = 0; break; @@ -8835,7 +8850,7 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite * u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - bool8 ableToStore = FALSE; + bool32 ableToStore = FALSE; if (gLockedAnimObjectEvents == NULL) { gLockedAnimObjectEvents = AllocZeroed(sizeof(struct LockedAnimObjectEvents)); @@ -8845,8 +8860,9 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct } else { - u8 i, firstFreeSlot; - bool8 found; + u8 i; + u8 firstFreeSlot; + bool32 found; for (firstFreeSlot = 16, found = FALSE, i = 0; i < 16; i++) { if (firstFreeSlot == 16 && gLockedAnimObjectEvents->objectEventIds[i] == 0) @@ -8879,7 +8895,7 @@ u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct u8 MovementAction_FreeAndUnlockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - bool8 ableToStore; + bool32 ableToStore; u8 index; sprite->data[2] = 1; @@ -8923,7 +8939,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *objectEvent) u8 taskId = CreateTask(ApplyLevitateMovement, 0xFF); struct Task *task = &gTasks[taskId]; - StoreWordInTwoHalfwords((u16 *)&task->data[0], (u32)objectEvent); + StoreWordInTwoHalfwords(&task->data[0], (u32)objectEvent); objectEvent->warpArrowSpriteId = taskId; task->data[3] = 0xFFFF; } @@ -8934,7 +8950,7 @@ static void ApplyLevitateMovement(u8 taskId) struct Sprite *sprite; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // load the map object pointer. + LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // load the map object pointer. sprite = &gSprites[objectEvent->spriteId]; if(!(task->data[2] & 0x3)) @@ -8951,7 +8967,7 @@ void DestroyExtraMovementTask(u8 taskId) struct ObjectEvent *objectEvent; struct Task *task = &gTasks[taskId]; - LoadWordFromTwoHalfwords((u16 *)&task->data[0], (u32 *)&objectEvent); // unused objectEvent + LoadWordFromTwoHalfwords(&task->data[0], (u32 *)&objectEvent); // unused objectEvent DestroyTask(taskId); } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 61065367cc..d41bc5970a 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -30,7 +30,6 @@ #include "trade.h" #include "util.h" #include "constants/battle_string_ids.h" -#include "constants/species.h" #include "constants/songs.h" #include "constants/rgb.h" @@ -256,7 +255,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, trainerId = GetMonData(mon, MON_DATA_OT_ID); personality = GetMonData(mon, MON_DATA_PERSONALITY); DecompressPicFromTable_2(&gMonFrontPicTable[currSpecies], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], currSpecies); pokePal = GetMonSpritePalStructFromOtIdPersonality(currSpecies, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x110, 0x20); @@ -271,7 +270,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, // postEvo sprite DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve], - gMonSpritesGfxPtr->sprites[3], + gMonSpritesGfxPtr->sprites.ptr[3], speciesToEvolve); pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x120, 0x20); @@ -348,7 +347,7 @@ static void CB2_EvolutionSceneLoadGraphics(void) gReservedSpritePaletteCount = 4; DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies], - gMonSpritesGfxPtr->sprites[3], + gMonSpritesGfxPtr->sprites.ptr[3], postEvoSpecies); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); @@ -420,7 +419,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) u32 trainerId = GetMonData(Mon, MON_DATA_OT_ID); u32 personality = GetMonData(Mon, MON_DATA_PERSONALITY); DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies], - gMonSpritesGfxPtr->sprites[3], + gMonSpritesGfxPtr->sprites.ptr[3], postEvoSpecies); pokePal = GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, trainerId, personality); LoadCompressedPalette(pokePal->data, 0x120, 0x20); @@ -484,7 +483,7 @@ void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpri sEvoStructPtr->preEvoSpriteID = preEvoSpriteID; DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve], - gMonSpritesGfxPtr->sprites[1], + gMonSpritesGfxPtr->sprites.ptr[1], speciesToEvolve); pokePal = GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, trainerId, personality); diff --git a/src/faraway_island.c b/src/faraway_island.c index 6bfa066c28..e3d8444c98 100755 --- a/src/faraway_island.c +++ b/src/faraway_island.c @@ -181,36 +181,40 @@ u32 GetMewMoveDirection(void) { if (ShouldMewMoveEast(mew, 1)) return GetRandomMewDirectionCandidate(2); - if (ShouldMewMoveWest(mew, 1)) + else if (ShouldMewMoveWest(mew, 1)) return GetRandomMewDirectionCandidate(2); - return DIR_NORTH; + else + return DIR_NORTH; } if (ShouldMewMoveSouth(mew, 0)) { if (ShouldMewMoveEast(mew, 1)) return GetRandomMewDirectionCandidate(2); - if (ShouldMewMoveWest(mew, 1)) + else if (ShouldMewMoveWest(mew, 1)) return GetRandomMewDirectionCandidate(2); - return DIR_SOUTH; + else + return DIR_SOUTH; } if (ShouldMewMoveEast(mew, 0)) { if (ShouldMewMoveNorth(mew, 1)) return GetRandomMewDirectionCandidate(2); - if (ShouldMewMoveSouth(mew, 1)) + else if (ShouldMewMoveSouth(mew, 1)) return GetRandomMewDirectionCandidate(2); - return DIR_EAST; + else + return DIR_EAST; } if (ShouldMewMoveWest(mew, 0)) { if (ShouldMewMoveNorth(mew, 1)) return GetRandomMewDirectionCandidate(2); - if (ShouldMewMoveSouth(mew, 1)) + else if (ShouldMewMoveSouth(mew, 1)) return GetRandomMewDirectionCandidate(2); - return DIR_WEST; + else + return DIR_WEST; } // If this point is reached, Mew cannot move without getting closer to the player @@ -311,7 +315,8 @@ static u8 GetValidMewMoveDirection(u8 ignoredDir) if (count > 1) return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % count]; - return sMewDirectionCandidates[0]; + else + return sMewDirectionCandidates[0]; } void UpdateFarawayIslandStepCounter(void) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index a623649e7e..9ae1dba77f 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -748,7 +748,8 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB } if (MetatileBehavior_IsWarpOrBridge(metatileBehavior) == TRUE) { - sub_80B0268(); + // Maybe unused? This MB is used by log bridges, but there's never a warp event on them + DoSpinExitWarp(); return TRUE; } if (MetatileBehavior_IsMtPyreHole(metatileBehavior) == TRUE) diff --git a/src/field_effect.c b/src/field_effect.c index b64902c0ec..5a18557eb9 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2597,7 +2597,7 @@ static void FieldMoveShowMonOutdoorsEffect_Init(struct Task *task) { task->data[11] = REG_WININ; task->data[12] = REG_WINOUT; - StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback); + StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback); task->tWinHoriz = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH + 1); task->tWinVert = WIN_RANGE(DISPLAY_HEIGHT / 2, DISPLAY_HEIGHT / 2 + 1); task->tWinIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; @@ -3846,7 +3846,6 @@ bool8 FldEff_MoveDeoxysRock(struct Sprite* sprite) static void Task_MoveDeoxysRock(u8 taskId) { - // BUG: Possible divide by zero s16 *data = gTasks[taskId].data; struct Sprite *sprite = &gSprites[data[1]]; switch (data[0]) @@ -3854,8 +3853,16 @@ static void Task_MoveDeoxysRock(u8 taskId) case 0: data[4] = sprite->pos1.x << 4; data[5] = sprite->pos1.y << 4; - data[6] = (data[2] * 16 - data[4]) / data[8]; - data[7] = (data[3] * 16 - data[5]) / data[8]; + + // UB: Possible divide by zero + #ifdef UBFIX + #define DIVISOR (data[8] ? data[8] : 1); + #else + #define DIVISOR (data[8]) + #endif + + data[6] = (data[2] * 16 - data[4]) / DIVISOR; + data[7] = (data[3] * 16 - data[5]) / DIVISOR; data[0]++; case 1: if (data[8] != 0) diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 886e023d1c..2322232b88 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -81,15 +81,15 @@ static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, const struct ObjectEventGraphicsInfo *graphicsInfo; graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - if (graphicsInfo->paletteTag2 != OBJ_EVENT_PAL_TAG_NONE) + if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) { if (graphicsInfo->paletteSlot == 0) { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, paletteIndex); + LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); } else if (graphicsInfo->paletteSlot == 10) { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, paletteIndex); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); } else { @@ -106,9 +106,9 @@ static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEven const struct ObjectEventGraphicsInfo *graphicsInfo; graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - if (graphicsInfo->paletteTag2 != OBJ_EVENT_PAL_TAG_NONE) + if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) { - PatchObjectPalette(graphicsInfo->paletteTag2, paletteNum); + PatchObjectPalette(graphicsInfo->reflectionPaletteTag, paletteNum); UpdateSpritePaletteWithWeather(paletteNum); } } diff --git a/src/field_message_box.c b/src/field_message_box.c index 1b760c7df2..b98425b66f 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -1,6 +1,5 @@ #include "global.h" #include "menu.h" -#include "string.h" #include "string_util.h" #include "task.h" #include "text.h" diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index d7ebbbce07..7594a1873a 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -30,10 +30,9 @@ #include "constants/maps.h" #include "constants/moves.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainer_types.h" -static EWRAM_DATA u8 gUnknown_0203734C = 0; +static EWRAM_DATA u8 sSpinStartFacingDir = 0; EWRAM_DATA struct ObjectEvent gObjectEvents[OBJECT_EVENTS_COUNT] = {}; EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {}; @@ -140,7 +139,7 @@ static u8 Fishing_PutRodAway(struct Task *task); static u8 Fishing_EndNoMon(struct Task *task); static void AlignFishingAnimationFrames(void); -static u8 sub_808D38C(struct ObjectEvent *object, s16 *a1); +static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *a1); // .rodata @@ -344,10 +343,6 @@ void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys) static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEvent, u8 direction) { - u8 r5 = direction; - u8 r6 = direction; - r6++; r6--; - if (ObjectEventIsMovementOverridden(playerObjEvent) && !ObjectEventClearHeldMovementIfFinished(playerObjEvent)) { @@ -359,13 +354,13 @@ static bool8 TryInterruptObjectEventSpecialAnim(struct ObjectEvent *playerObjEve return TRUE; } - if (playerObjEvent->movementDirection != r5) + if (playerObjEvent->movementDirection != direction) { ObjectEventClearHeldMovement(playerObjEvent); return FALSE; } - if (!sub_808B028(r6)) + if (!sub_808B028(direction)) { ObjectEventClearHeldMovement(playerObjEvent); return FALSE; @@ -2063,54 +2058,64 @@ static void AlignFishingAnimationFrames(void) SetSurfBobWhileFishingState(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, 1, playerSprite->pos2.y); } -void sub_808D074(u8 a0) +void SetSpinStartFacingDir(u8 direction) { - gUnknown_0203734C = a0; + sSpinStartFacingDir = direction; } -static u8 sub_808D080(void) +static u8 GetSpinStartFacingDir(void) { - if (gUnknown_0203734C == 0) - { - return 1; - } - return gUnknown_0203734C; + if (sSpinStartFacingDir == DIR_NONE) + return DIR_SOUTH; + + return sSpinStartFacingDir; } -static void sub_808D094(u8 taskId) +// Task data for Task_DoPlayerSpinEntrance and Task_DoPlayerSpinExit +#define tState data[0] +#define tSpinDelayTimer data[1] +#define tSpeed data[2] +#define tCurY data[3] +#define tDestY data[4] +#define tStartDir data[5] +#define tPriority data[6] +#define tSubpriority data[7] +#define tGroundTimer data[8] + +static void Task_DoPlayerSpinExit(u8 taskId) { struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[object->spriteId]; s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { - case 0: + case 0: // Init if (!ObjectEventClearHeldMovementIfFinished(object)) - { return; - } - sub_808D074(object->facingDirection); - data[1] = 0; - data[2] = 1; - data[3] = (u16)(sprite->pos1.y + sprite->pos2.y) * 16; + SetSpinStartFacingDir(object->facingDirection); + tSpinDelayTimer = 0; + tSpeed = 1; + tCurY = (u16)(sprite->pos1.y + sprite->pos2.y) << 4; sprite->pos2.y = 0; CameraObjectReset2(); object->fixedPriority = TRUE; sprite->oam.priority = 0; sprite->subpriority = 0; sprite->subspriteMode = SUBSPRITES_OFF; - data[0]++; - case 1: - sub_808D38C(object, &data[1]); - data[3] -= data[2]; - data[2] += 3; - sprite->pos1.y = data[3] >> 4; + tState++; + case 1: // Spin while rising + TrySpinPlayerForWarp(object, &tSpinDelayTimer); + + // Rise and accelerate + tCurY -= tSpeed; + tSpeed += 3; + sprite->pos1.y = tCurY >> 4; + + // Check if offscreen if (sprite->pos1.y + (s16)gTotalCameraPixelOffsetY < -32) - { - data[0]++; - } + tState++; break; case 2: DestroyTask(taskId); @@ -2118,84 +2123,86 @@ static void sub_808D094(u8 taskId) } } -static void sub_808D1FC(u8 taskId); +static void Task_DoPlayerSpinEntrance(u8 taskId); -void sub_808D194(void) +void DoPlayerSpinEntrance(void) { - sub_808D1FC(CreateTask(sub_808D1FC, 0)); + Task_DoPlayerSpinEntrance(CreateTask(Task_DoPlayerSpinEntrance, 0)); } -bool32 sub_808D1B4(void) +bool32 IsPlayerSpinEntranceActive(void) { - return FuncIsActiveTask(sub_808D1FC); + return FuncIsActiveTask(Task_DoPlayerSpinEntrance); } -void sub_808D1C8(void) +void DoPlayerSpinExit(void) { - sub_808D094(CreateTask(sub_808D094, 0)); + Task_DoPlayerSpinExit(CreateTask(Task_DoPlayerSpinExit, 0)); } -bool32 sub_808D1E8(void) +bool32 IsPlayerSpinExitActive(void) { - return FuncIsActiveTask(sub_808D094); + return FuncIsActiveTask(Task_DoPlayerSpinExit); } -static const u8 gUnknown_084975BC[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; +static const u8 sSpinDirections[] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH}; -static void sub_808D1FC(u8 taskId) +static void Task_DoPlayerSpinEntrance(u8 taskId) { struct ObjectEvent *object = &gObjectEvents[gPlayerAvatar.objectEventId]; struct Sprite *sprite = &gSprites[object->spriteId]; s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: - data[5] = sub_808D080(); - ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(gUnknown_084975BC[data[5]])); - data[1] = 0; - data[2] = 116; - data[4] = sprite->pos1.y; - data[6] = sprite->oam.priority; - data[7] = sprite->subpriority; - data[3] = -((u16)sprite->pos2.y + 32) * 16; + // Because the spin start facing direction is never set for this + // warp type, the player will always exit the warp facing South. + // This may have been intentional, unclear + tStartDir = GetSpinStartFacingDir(); + ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(sSpinDirections[tStartDir])); + tSpinDelayTimer = 0; + tSpeed = 116; + tDestY = sprite->pos1.y; + tPriority = sprite->oam.priority; + tSubpriority = sprite->subpriority; + tCurY = -((u16)sprite->pos2.y + 32) * 16; sprite->pos2.y = 0; CameraObjectReset2(); object->fixedPriority = TRUE; sprite->oam.priority = 1; sprite->subpriority = 0; sprite->subspriteMode = SUBSPRITES_OFF; - data[0]++; - case 1: - sub_808D38C(object, &data[1]); - data[3] += data[2]; - data[2] -= 3; - if (data[2] < 4) + tState++; + case 1: // Spin while descending + TrySpinPlayerForWarp(object, &tSpinDelayTimer); + + // Fall and decelerate + tCurY += tSpeed; + tSpeed -= 3; + if (tSpeed < 4) + tSpeed = 4; + sprite->pos1.y = tCurY >> 4; + + // Check if reached dest + if (sprite->pos1.y >= tDestY) { - data[2] = 4; - } - sprite->pos1.y = data[3] >> 4; - if (sprite->pos1.y >= data[4]) - { - sprite->pos1.y = data[4]; - data[8] = 0; - data[0]++; + sprite->pos1.y = tDestY; + tGroundTimer = 0; + tState++; } break; - case 2: - sub_808D38C(object, &data[1]); - data[8]++; - if (data[8] > 8) - { - data[0]++; - } + case 2: // Spin on ground + TrySpinPlayerForWarp(object, &tSpinDelayTimer); + if (++tGroundTimer > 8) + tState++; break; - case 3: - if (data[5] == sub_808D38C(object, &data[1])) + case 3: // Spin until facing original direction + if (tStartDir == TrySpinPlayerForWarp(object, &tSpinDelayTimer)) { object->fixedPriority = 0; - sprite->oam.priority = data[6]; - sprite->subpriority = data[7]; + sprite->oam.priority = tPriority; + sprite->subpriority = tSubpriority; CameraObjectReset1(); DestroyTask(taskId); } @@ -2203,19 +2210,15 @@ static void sub_808D1FC(u8 taskId) } } -static u8 sub_808D38C(struct ObjectEvent *object, s16 *a1) +static u8 TrySpinPlayerForWarp(struct ObjectEvent *object, s16 *delayTimer) { - if (*a1 < 8 && ++(*a1) < 8) - { + if (*delayTimer < 8 && ++(*delayTimer) < 8) return object->facingDirection; - } if (!ObjectEventCheckHeldMovementStatus(object)) - { return object->facingDirection; - } - ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(gUnknown_084975BC[object->facingDirection])); - *a1 = 0; - return gUnknown_084975BC[object->facingDirection]; + ObjectEventForceSetHeldMovement(object, GetFaceDirectionMovementAction(sSpinDirections[object->facingDirection])); + *delayTimer = 0; + return sSpinDirections[object->facingDirection]; } diff --git a/src/field_poison.c b/src/field_poison.c index 9d3ca047c7..132ce571e1 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -16,7 +16,6 @@ #include "trainer_hill.h" #include "constants/field_poison.h" #include "constants/party_menu.h" -#include "constants/species.h" static bool32 IsMonValidSpecies(struct Pokemon *pokemon) { diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 7c47075141..29b071a3b0 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -42,12 +42,15 @@ static void Task_DoContestHallWarp(u8); static void FillPalBufferWhite(void); static void Task_ExitDoor(u8); static bool32 WaitForWeatherFadeIn(void); -static void Task_TeleportTileWarpExit(u8 taskId); +static void Task_SpinEnterWarp(u8 taskId); static void Task_WarpAndLoadMap(u8 taskId); static void Task_DoDoorWarp(u8 taskId); static void Task_EnableScriptAfterMusicFade(u8 taskId); static void Task_ExitStairs(u8 taskId); +// data[0] is used universally by tasks in this file as a state for switches +#define tState data[0] + // const static const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 }; const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelPixelRadii) - 1; @@ -157,17 +160,17 @@ static void Task_ReturnToFieldCableLink(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: task->data[1] = CreateTask_ReestablishCableClubLink(); - task->data[0]++; + task->tState++; break; case 1: if (gTasks[task->data[1]].isActive != TRUE) { WarpFadeInScreen(); - task->data[0]++; + task->tState++; } break; case 2: @@ -192,11 +195,11 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: SetLinkStandbyCallback(); - task->data[0]++; + task->tState++; break; case 1: if (!IsLinkTaskFinished()) @@ -207,7 +210,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId) else { WarpFadeInScreen(); - task->data[0]++; + task->tState++; } break; case 2: @@ -225,16 +228,16 @@ void Task_ReturnToFieldRecordMixing(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: SetLinkStandbyCallback(); - task->data[0]++; + task->tState++; break; case 1: if (IsLinkTaskFinished()) { - task->data[0]++; + task->tState++; } break; case 2: @@ -298,12 +301,12 @@ void FieldCB_WarpExitFadeFromBlack(void) ScriptContext2_Enable(); } -static void FieldCB_TeleportTileWarpExit(void) +static void FieldCB_SpinEnterWarp(void) { Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); PlaySE(SE_WARP_OUT); - CreateTask(Task_TeleportTileWarpExit, 10); + CreateTask(Task_SpinEnterWarp, 10); ScriptContext2_Enable(); } @@ -323,14 +326,14 @@ static void Task_ExitDoor(u8 taskId) s16 *x = &task->data[2]; s16 *y = &task->data[3]; - switch (task->data[0]) + switch (task->tState) { case 0: SetPlayerVisibility(FALSE); FreezeObjectEvents(); PlayerGetDestCoords(x, y); FieldSetDoorOpened(*x, *y); - task->data[0] = 1; + task->tState = 1; break; case 1: if (WaitForWeatherFadeIn()) @@ -339,7 +342,7 @@ static void Task_ExitDoor(u8 taskId) SetPlayerVisibility(TRUE); objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_WALK_NORMAL_DOWN); - task->data[0] = 2; + task->tState = 2; } break; case 2: @@ -349,14 +352,14 @@ static void Task_ExitDoor(u8 taskId) task->data[1] = FieldAnimateDoorClose(*x, *y); objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]); - task->data[0] = 3; + task->tState = 3; } break; case 3: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { UnfreezeObjectEvents(); - task->data[0] = 4; + task->tState = 4; } break; case 4: @@ -372,13 +375,13 @@ static void Task_ExitNonAnimDoor(u8 taskId) s16 *x = &task->data[2]; s16 *y = &task->data[3]; - switch (task->data[0]) + switch (task->tState) { case 0: SetPlayerVisibility(FALSE); FreezeObjectEvents(); PlayerGetDestCoords(x, y); - task->data[0] = 1; + task->tState = 1; break; case 1: if (WaitForWeatherFadeIn()) @@ -387,14 +390,14 @@ static void Task_ExitNonAnimDoor(u8 taskId) SetPlayerVisibility(TRUE); objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], GetWalkNormalMovementAction(GetPlayerFacingDirection())); - task->data[0] = 2; + task->tState = 2; } break; case 2: if (IsPlayerStandingStill()) { UnfreezeObjectEvents(); - task->data[0] = 3; + task->tState = 3; } break; case 3: @@ -406,12 +409,12 @@ static void Task_ExitNonAnimDoor(u8 taskId) static void Task_ExitNonDoor(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; break; case 1: if (WaitForWeatherFadeIn()) @@ -446,7 +449,7 @@ bool8 FieldCB_ReturnToFieldOpenStartMenu(void) return FALSE; } -static void task_mpl_807E3C8(u8 taskId) +static void Task_ReturnToFieldNoScript(u8 taskId) { if (WaitForWeatherFadeIn() == 1) { @@ -456,19 +459,19 @@ static void task_mpl_807E3C8(u8 taskId) } } -void sub_80AF6D4(void) +void FieldCB_ReturnToFieldNoScript(void) { ScriptContext2_Enable(); FadeInFromBlack(); - CreateTask(task_mpl_807E3C8, 10); + CreateTask(Task_ReturnToFieldNoScript, 10); } -void sub_80AF6F0(void) +void FieldCB_ReturnToFieldNoScriptCheckMusic(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); FadeInFromBlack(); - CreateTask(task_mpl_807E3C8, 10); + CreateTask(Task_ReturnToFieldNoScript, 10); } static bool32 PaletteFadeActive(void) @@ -546,7 +549,9 @@ void DoLavaridgeGym1FWarp(void) StartLavaridgeGym1FWarp(10); } -// Warp from a teleporting tile, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut) +// DoSpinEnterWarp but with a fade out +// Screen fades out to exit current map, player spins down from top to enter new map +// Used by teleporting tiles, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut) void DoTeleportTileWarp(void) { ScriptContext2_Enable(); @@ -554,7 +559,7 @@ void DoTeleportTileWarp(void) WarpFadeOutScreen(); PlaySE(SE_WARP_IN); CreateTask(Task_WarpAndLoadMap, 10); - gFieldCallback = FieldCB_TeleportTileWarpExit; + gFieldCallback = FieldCB_SpinEnterWarp; } void DoMossdeepGymWarp(void) @@ -577,8 +582,6 @@ void DoPortholeWarp(void) gFieldCallback = FieldCB_ShowPortholeView; } -#define tState data[0] - static void Task_DoCableClubWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -601,8 +604,6 @@ static void Task_DoCableClubWarp(u8 taskId) } } -#undef tState - void DoCableClubWarp(void) { ScriptContext2_Enable(); @@ -616,20 +617,20 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: ClearLinkCallback_2(); FadeScreen(FADE_TO_BLACK, 0); TryFadeOutOldMapMusic(); PlaySE(SE_EXIT); - data[0]++; + tState++; break; case 1: if (!PaletteFadeActive() && BGMusicStopped()) { SetCloseLinkCallback(); - data[0]++; + tState++; } break; case 2: @@ -652,12 +653,12 @@ static void Task_WarpAndLoadMap(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); - task->data[0]++; + task->tState++; break; case 1: if (!PaletteFadeActive()) @@ -668,7 +669,7 @@ static void Task_WarpAndLoadMap(u8 taskId) task->data[1] = 1; } if (BGMusicStopped()) - task->data[0]++; + task->tState++; } break; case 2: @@ -685,14 +686,14 @@ static void Task_DoDoorWarp(u8 taskId) s16 *x = &task->data[2]; s16 *y = &task->data[3]; - switch (task->data[0]) + switch (task->tState) { case 0: FreezeObjectEvents(); PlayerGetDestCoords(x, y); PlaySE(GetDoorSoundEffect(*x, *y - 1)); task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); - task->data[0] = 1; + task->tState = 1; break; case 1: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) @@ -702,7 +703,7 @@ static void Task_DoDoorWarp(u8 taskId) ObjectEventClearHeldMovementIfActive(&gObjectEvents[objEventId]); objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_WALK_NORMAL_UP); - task->data[0] = 2; + task->tState = 2; } break; case 2: @@ -713,20 +714,20 @@ static void Task_DoDoorWarp(u8 taskId) objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]); SetPlayerVisibility(FALSE); - task->data[0] = 3; + task->tState = 3; } break; case 3: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { - task->data[0] = 4; + task->tState = 4; } break; case 4: TryFadeOutOldMapMusic(); WarpFadeOutScreen(); PlayRainStoppingSoundEffect(); - task->data[0] = 0; + task->tState = 0; task->func = Task_WarpAndLoadMap; break; } @@ -736,17 +737,17 @@ static void Task_DoContestHallWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); - task->data[0]++; + task->tState++; break; case 1: if (!PaletteFadeActive() && BGMusicStopped()) { - task->data[0]++; + task->tState++; } break; case 2: @@ -853,22 +854,22 @@ static void UpdateFlashLevelEffect(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); - data[0] = 1; + tState = 1; break; case 1: SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); - data[0] = 0; + tState = 0; tCurFlashRadius += tFlashRadiusDelta; if (tCurFlashRadius > tDestFlashRadius) { if (tClearScanlineEffect == 1) { ScanlineEffect_Stop(); - data[0] = 2; + tState = 2; } else { @@ -887,22 +888,22 @@ static void UpdateOrbFlashEffect(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); - data[0] = 1; + tState = 1; break; case 1: SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); - data[0] = 0; + tState = 0; tCurFlashRadius += tFlashRadiusDelta; if (tCurFlashRadius > tDestFlashRadius) { if (tClearScanlineEffect == 1) { ScanlineEffect_Stop(); - data[0] = 2; + tState = 2; } else { @@ -917,7 +918,7 @@ static void UpdateOrbFlashEffect(u8 taskId) } } -static void sub_80AFF90(u8 taskId) +static void Task_WaitForFlashUpdate(u8 taskId) { if (!FuncIsActiveTask(UpdateFlashLevelEffect)) { @@ -926,13 +927,13 @@ static void sub_80AFF90(u8 taskId) } } -static void sub_80AFFB8(void) +static void StartWaitForFlashUpdate(void) { - if (!FuncIsActiveTask(sub_80AFF90)) - CreateTask(sub_80AFF90, 80); + if (!FuncIsActiveTask(Task_WaitForFlashUpdate)) + CreateTask(Task_WaitForFlashUpdate, 80); } -static u8 sub_80AFFDC(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) +static u8 StartUpdateFlashLevelEffect(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) { u8 taskId = CreateTask(UpdateFlashLevelEffect, 80); s16 *data = gTasks[taskId].data; @@ -951,7 +952,7 @@ static u8 sub_80AFFDC(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 dest return taskId; } -static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) +static u8 StartUpdateOrbFlashEffect(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) { u8 taskId = CreateTask(UpdateOrbFlashEffect, 80); s16 *data = gTasks[taskId].data; @@ -975,14 +976,15 @@ static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 dest #undef tFlashRadiusDelta #undef tClearScanlineEffect +// A higher flashLevel value is a smaller flash radius (more darkness). 0 is full brightness void AnimateFlash(u8 flashLevel) { u8 curFlashLevel = Overworld_GetFlashLevel(); - u8 value = 0; + bool8 fullBrightness = FALSE; if (!flashLevel) - value = 1; - sub_80AFFDC(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1); - sub_80AFFB8(); + fullBrightness = TRUE; + StartUpdateFlashLevelEffect(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], fullBrightness, 1); + StartWaitForFlashUpdate(); ScriptContext2_Enable(); } @@ -1001,18 +1003,18 @@ void WriteBattlePyramidViewScanlineEffectBuffer(void) CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480); } -static void Task_TeleportTileWarpExit(u8 taskId) +static void Task_SpinEnterWarp(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); - sub_808D194(); - gTasks[taskId].data[0]++; + DoPlayerSpinEntrance(); + gTasks[taskId].tState++; break; case 1: - if (WaitForWeatherFadeIn() && sub_808D1B4() != TRUE) + if (WaitForWeatherFadeIn() && IsPlayerSpinEntranceActive() != TRUE) { UnfreezeObjectEvents(); ScriptContext2_Disable(); @@ -1022,29 +1024,29 @@ static void Task_TeleportTileWarpExit(u8 taskId) } } -static void sub_80B01BC(u8 taskId) +static void Task_SpinExitWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[0]) + switch (task->tState) { case 0: FreezeObjectEvents(); ScriptContext2_Enable(); PlaySE(SE_WARP_IN); - sub_808D1C8(); - task->data[0]++; + DoPlayerSpinExit(); + task->tState++; break; case 1: - if (!sub_808D1E8()) + if (!IsPlayerSpinExitActive()) { WarpFadeOutScreen(); - task->data[0]++; + task->tState++; } break; case 2: if (!PaletteFadeActive() && BGMusicStopped()) - task->data[0]++; + task->tState++; break; case 3: WarpIntoMap(); @@ -1054,18 +1056,22 @@ static void sub_80B01BC(u8 taskId) } } -void sub_80B0244(void) +// Only called by an unused function +// DoTeleportTileWarp is used instead +void DoSpinEnterWarp(void) { ScriptContext2_Enable(); CreateTask(Task_WarpAndLoadMap, 10); - gFieldCallback = FieldCB_TeleportTileWarpExit; + gFieldCallback = FieldCB_SpinEnterWarp; } -void sub_80B0268(void) +// Opposite of DoSpinEnterWarp / DoTeleportTileWarp +// Player exits current map by spinning up offscreen, enters new map with a fade in +void DoSpinExitWarp(void) { ScriptContext2_Enable(); gFieldCallback = FieldCB_DefaultWarpExit; - CreateTask(sub_80B01BC, 10); + CreateTask(Task_SpinExitWarp, 10); } static void LoadOrbEffectPalette(bool8 blueOrb) @@ -1112,7 +1118,6 @@ static bool8 sub_80B02C8(u16 shakeDir) return FALSE; } -#define tState data[0] #define tBlueOrb data[1] #define tCenterX data[2] #define tCenterY data[3] @@ -1151,7 +1156,7 @@ static void Task_OrbEffect(u8 taskId) case 1: sub_8199DF0(0, PIXEL_FILL(1), 0, 1); LoadOrbEffectPalette(tBlueOrb); - sub_80B003C(tCenterX, tCenterY, 1, 160, 1, 2); + StartUpdateOrbFlashEffect(tCenterX, tCenterY, 1, 160, 1, 2); tState = 2; break; case 2: @@ -1246,7 +1251,6 @@ void FadeOutOrbEffect(void) gTasks[taskId].tState = 6; } -#undef tState #undef tBlueOrb #undef tCenterX #undef tCenterY diff --git a/src/field_specials.c b/src/field_specials.c index 57b7501454..a6831ec5be 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -16,6 +16,7 @@ #include "field_screen_effect.h" #include "field_specials.h" #include "field_weather.h" +#include "graphics.h" #include "international_string_util.h" #include "item_icon.h" #include "link.h" @@ -60,7 +61,6 @@ #include "constants/script_menu.h" #include "constants/slot_machine.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/moves.h" #include "constants/party_menu.h" #include "constants/battle_frontier.h" @@ -87,11 +87,6 @@ static EWRAM_DATA u32 sBattleTowerMultiBattleTypeFlags = 0; struct ListMenuTemplate gScrollableMultichoice_ListMenuTemplate; -extern const u16 gObjectEventPalette8[]; -extern const u16 gObjectEventPalette17[]; -extern const u16 gObjectEventPalette33[]; -extern const u16 gObjectEventPalette34[]; - void TryLoseFansFromPlayTime(void); void SetPlayerGotFirstFans(void); u16 GetNumFansOfPlayerInTrainerFanClub(void); @@ -622,18 +617,18 @@ static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEvent switch (graphicsId) { - case OBJ_EVENT_GFX_LINK_RS_BRENDAN: - LoadPalette(gObjectEventPalette33, 0x100 + (adjustedPaletteNum << 4), 0x20); - break; - case OBJ_EVENT_GFX_LINK_RS_MAY: - LoadPalette(gObjectEventPalette34, 0x100 + (adjustedPaletteNum << 4), 0x20); - break; - case OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL: - LoadPalette(gObjectEventPalette8, 0x100 + (adjustedPaletteNum << 4), 0x20); - break; - case OBJ_EVENT_GFX_RIVAL_MAY_NORMAL: - LoadPalette(gObjectEventPalette17, 0x100 + (adjustedPaletteNum << 4), 0x20); - break; + case OBJ_EVENT_GFX_LINK_RS_BRENDAN: + LoadPalette(gObjectEventPal_RubySapphireBrendan, 0x100 + (adjustedPaletteNum << 4), 0x20); + break; + case OBJ_EVENT_GFX_LINK_RS_MAY: + LoadPalette(gObjectEventPal_RubySapphireMay, 0x100 + (adjustedPaletteNum << 4), 0x20); + break; + case OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL: + LoadPalette(gObjectEventPal_Brendan, 0x100 + (adjustedPaletteNum << 4), 0x20); + break; + case OBJ_EVENT_GFX_RIVAL_MAY_NORMAL: + LoadPalette(gObjectEventPal_May, 0x100 + (adjustedPaletteNum << 4), 0x20); + break; } } } @@ -1419,7 +1414,7 @@ void GiveLeadMonEffortRibbon(void) bool8 Special_AreLeadMonEVsMaxedOut(void) { - if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= 510) + if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= MAX_TOTAL_EVS) { return TRUE; } @@ -1454,7 +1449,7 @@ void SetShoalItemFlag(u16 unused) void PutZigzagoonInPlayerParty(void) { u16 monData; - CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); monData = TRUE; SetMonData(&gPlayerParty[0], MON_DATA_ABILITY_NUM, &monData); monData = MOVE_TACKLE; diff --git a/src/fieldmap.c b/src/fieldmap.c index 49337ebbec..296c4edf25 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -797,15 +797,33 @@ bool8 CameraMove(int x, int y) struct MapConnection *sub_8088950(u8 direction, int x, int y) { int count; - struct MapConnection *connection; int i; - count = gMapHeader.connections->count; - connection = gMapHeader.connections->connections; + struct MapConnection *connection; + const struct MapConnections *connections = gMapHeader.connections; + // UB: Multiple possible null dereferences +#ifdef UBFIX + if (connections != NULL) + { + count = connections->count; + connection = connections->connections; + if (connection != NULL) + { + for (i = 0; i < count; i++, connection++) + { + if (connection->direction == direction && sub_80889A8(direction, x, y, connection) == TRUE) + return connection; + } + } + } +#else + count = connections->count; + connection = connections->connections; for (i = 0; i < count; i++, connection++) { if (connection->direction == direction && sub_80889A8(direction, x, y, connection) == TRUE) return connection; } +#endif return NULL; } diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 9916177131..0458f76215 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -227,9 +227,9 @@ bool8 SetUpFieldMove_Cut(void) y = gPlayerFacingPosition.y + sHyperCutStruct[i].y; tileCuttable = TRUE; - for (j = 0; j < 2; ++j) { - if (sHyperCutStruct[i].unk2[j] == 0) - break; + for (j = 0; j < 2; ++j) + { + if (sHyperCutStruct[i].unk2[j] == 0) break; // one line required to match -g if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE) { tileCuttable = FALSE; @@ -251,8 +251,11 @@ bool8 SetUpFieldMove_Cut(void) sHyperCutTiles[tileArrayId] = TRUE; ret = TRUE; } - else if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) - sHyperCutTiles[tileArrayId] = TRUE; + else + { + if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) + sHyperCutTiles[tileArrayId] = TRUE; + } } } } diff --git a/src/frontier_pass.c b/src/frontier_pass.c index ac81c51e07..cf170b3500 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -983,6 +983,9 @@ static void Task_HandleFrontierPassInput(u8 taskId) SetMainCallback2(CB2_HideFrontierPass); DestroyTask(taskId); // BUG. The function should return here. Otherwise, it can play the same sound twice and destroy the same task twice. + #ifdef BUGFIX + return; + #endif } } @@ -1195,7 +1198,7 @@ static void sub_80C6104(u8 cursorArea, u8 previousCursorArea) return; break; } - + switch (cursorArea) { case CURSOR_AREA_MAP: @@ -1209,7 +1212,7 @@ static void sub_80C6104(u8 cursorArea, u8 previousCursorArea) CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17); else return; - break; // needed + break; //needed to match case CURSOR_AREA_CANCEL: CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3374, 21, 0, 9, 2, 17); break; diff --git a/src/frontier_util.c b/src/frontier_util.c index a36e2ec9f4..db5f86aef8 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -31,7 +31,6 @@ #include "constants/battle_frontier.h" #include "constants/frontier_util.h" #include "constants/trainers.h" -#include "constants/species.h" #include "constants/game_stat.h" #include "constants/moves.h" #include "constants/items.h" @@ -130,7 +129,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_RAIKOU, .heldItem = ITEM_LUM_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MODEST, .evs = {158, 0, 252, 100, 0, 0}, .moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_REFLECT, MOVE_REST}, @@ -138,7 +137,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_LATIOS, .heldItem = ITEM_BRIGHT_POWDER, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MODEST, .evs = {252, 0, 252, 6, 0, 0}, .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_RECOVER, MOVE_DRAGON_CLAW}, @@ -146,7 +145,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SNORLAX, .heldItem = ITEM_CHESTO_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_ADAMANT, .evs = {252, 252, 0, 0, 6, 0}, .moves = {MOVE_CURSE, MOVE_RETURN, MOVE_REST, MOVE_SHADOW_BALL}, @@ -187,7 +186,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SWAMPERT, .heldItem = ITEM_LEFTOVERS, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {252, 252, 6, 0, 0, 0}, .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT}, @@ -195,7 +194,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_METAGROSS, .heldItem = ITEM_QUICK_CLAW, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {252, 252, 6, 0, 0, 0}, .moves = {MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_PROTECT}, @@ -203,7 +202,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_LATIAS, .heldItem = ITEM_CHESTO_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MODEST, .evs = {252, 0, 252, 6, 0, 0}, .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_REST}, @@ -244,7 +243,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_ARCANINE, .heldItem = ITEM_WHITE_HERB, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_HASTY, .evs = {6, 252, 252, 0, 0, 0}, .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_ROAR, MOVE_PROTECT}, @@ -252,7 +251,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SLAKING, .heldItem = ITEM_SCOPE_LENS, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_HARDY, .evs = {6, 252, 0, 252, 0, 0}, .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_YAWN}, @@ -260,7 +259,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SUICUNE, .heldItem = ITEM_KINGS_ROCK, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_HASTY, .evs = {252, 0, 252, 6, 0, 0}, .moves = {MOVE_BLIZZARD, MOVE_SURF, MOVE_BITE, MOVE_CALM_MIND}, @@ -301,7 +300,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_UMBREON, .heldItem = ITEM_CHESTO_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_CALM, .evs = {252, 0, 0, 0, 252, 6}, .moves = {MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_REST, MOVE_PSYCHIC}, @@ -309,7 +308,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_GENGAR, .heldItem = ITEM_LEFTOVERS, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MODEST, .evs = {252, 0, 252, 0, 6, 0}, .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_DESTINY_BOND}, @@ -317,7 +316,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_BRELOOM, .heldItem = ITEM_LUM_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_JOLLY, .evs = {6, 252, 0, 252, 0, 0}, .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HEADBUTT}, @@ -332,7 +331,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_METANG, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {0, 252, 252, 0, 6, 0}, .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}, @@ -340,7 +339,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SKARMORY, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_IMPISH, .evs = {252, 0, 0, 0, 6, 252}, .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}, @@ -348,7 +347,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_AGGRON, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_ADAMANT, .evs = {0, 252, 0, 0, 252, 6}, .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, @@ -358,7 +357,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_METANG, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {0, 252, 252, 0, 6, 0}, .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}, @@ -366,7 +365,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SKARMORY, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_IMPISH, .evs = {252, 0, 0, 0, 6, 252}, .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}, @@ -374,7 +373,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_AGGRON, .heldItem = ITEM_SITRUS_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_ADAMANT, .evs = {0, 252, 0, 0, 252, 6}, .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, @@ -415,7 +414,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_SEVIPER, .heldItem = ITEM_FOCUS_BAND, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BOLD, .evs = {252, 0, 0, 0, 252, 6}, .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN}, @@ -423,7 +422,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_STEELIX, .heldItem = ITEM_BRIGHT_POWDER, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_BRAVE, .evs = {252, 0, 0, 0, 6, 252}, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION, MOVE_SCREECH}, @@ -431,7 +430,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_GYARADOS, .heldItem = ITEM_CHESTO_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_ADAMANT, .evs = {252, 6, 0, 0, 0, 252}, .moves = {MOVE_DRAGON_DANCE, MOVE_RETURN, MOVE_ROAR, MOVE_REST}, @@ -472,7 +471,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_ARTICUNO, .heldItem = ITEM_SCOPE_LENS, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MILD, .evs = {6, 0, 252, 252, 0, 0}, .moves = {MOVE_BLIZZARD, MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_REFLECT}, @@ -480,7 +479,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_ZAPDOS, .heldItem = ITEM_LUM_BERRY, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MILD, .evs = {6, 0, 252, 252, 0, 0}, .moves = {MOVE_THUNDER, MOVE_DETECT, MOVE_DRILL_PECK, MOVE_LIGHT_SCREEN}, @@ -488,7 +487,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ { .species = SPECIES_MOLTRES, .heldItem = ITEM_BRIGHT_POWDER, - .fixedIV = 31, + .fixedIV = MAX_PER_STAT_IVS, .nature = NATURE_MILD, .evs = {6, 0, 252, 252, 0, 0}, .moves = {MOVE_FIRE_BLAST, MOVE_HYPER_BEAM, MOVE_AERIAL_ACE, MOVE_SAFEGUARD}, @@ -2384,13 +2383,21 @@ void ClearRankingHallRecords(void) { s32 i, j, k; + // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + #ifdef BUGFIX + u8 zero = 0; + #define ZERO (&zero) + #else + #define ZERO 0 + #endif + for (i = 0; i < HALL_FACILITIES_COUNT; i++) { for (j = 0; j < 2; j++) { for (k = 0; k < 3; k++) { - CopyTrainerId(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, ZERO); gSaveBlock2Ptr->hallRecords1P[i][j][k].name[0] = EOS; gSaveBlock2Ptr->hallRecords1P[i][j][k].winStreak = 0; } @@ -2401,8 +2408,8 @@ void ClearRankingHallRecords(void) { for (k = 0; k < 3; k++) { - CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. - CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id2, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id1, ZERO); + CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id2, ZERO); gSaveBlock2Ptr->hallRecords2P[j][k].name1[0] = EOS; gSaveBlock2Ptr->hallRecords2P[j][k].name2[0] = EOS; gSaveBlock2Ptr->hallRecords2P[j][k].winStreak = 0; @@ -2508,11 +2515,12 @@ void CreateFrontierBrainPokemon(void) { if (!(selectedMonBits & 1)) continue; + do { do { - j = Random32(); //Should be one while loop, but that doesn't match + j = Random32(); //should just be one while loop, but that doesn't match } while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j)); } while (sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j)); CreateMon(&gEnemyParty[monPartyId], diff --git a/src/graphics.c b/src/graphics.c index 3973c15076..aa8d5c249f 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -867,8 +867,8 @@ const u32 gBattleAnimSpriteGfx_Confetti[] = INCBIN_U32("graphics/battle_anims/sp const u32 gBattleAnimSpritePal_Confetti[] = INCBIN_U32("graphics/battle_anims/sprites/confetti.gbapal.lz"); const u32 gSubstituteDollPal[] = INCBIN_U32("graphics/battle_anims/sprites/substitute.gbapal.lz"); -const u32 gSubstituteDollGfx[] = INCBIN_U32("graphics/battle_anims/sprites/substitute.4bpp.lz"); -const u32 gSubstituteDollTilemap[] = INCBIN_U32("graphics/battle_anims/sprites/substitute.bin.lz"); +const u32 gSubstituteDollFrontGfx[] = INCBIN_U32("graphics/battle_anims/sprites/substitute.4bpp.lz"); +const u32 gSubstituteDollBackGfx[] = INCBIN_U32("graphics/battle_anims/sprites/substitute_back.4bpp.lz"); const u32 gBattleAnimSpriteGfx_GreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/green_star.4bpp.lz"); const u32 gBattleAnimSpritePal_GreenStar[] = INCBIN_U32("graphics/battle_anims/sprites/green_star.gbapal.lz"); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index a13543d6a0..7b63950d1d 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -18,7 +18,6 @@ #include "window.h" #include "credits.h" #include "bg.h" -#include "constants/species.h" #include "constants/game_stat.h" #include "util.h" #include "string_util.h" diff --git a/src/intro.c b/src/intro.c index eca8b84b16..7dab2ad46b 100644 --- a/src/intro.c +++ b/src/intro.c @@ -21,7 +21,6 @@ #include "intro.h" #include "graphics.h" #include "sound.h" -#include "constants/species.h" #include "util.h" #include "title_screen.h" #include "constants/rgb.h" diff --git a/src/item.c b/src/item.c index 290e7177c4..0b63660480 100644 --- a/src/item.c +++ b/src/item.c @@ -183,13 +183,15 @@ bool8 HasAtLeastOneBerry(void) bool8 CheckBagHasSpace(u16 itemId, u16 count) { - u8 i, pocket; - u16 slotCapacity, ownedCount; + u8 i; + u8 pocket; + u16 slotCapacity; + u16 ownedCount; if (ItemId_GetPocket(itemId) == POCKET_NONE) return FALSE; - if (InBattlePyramid() || (FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)) + if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) { return CheckPyramidBagHasSpace(itemId, count); } @@ -212,12 +214,12 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count) return FALSE; count -= (slotCapacity - ownedCount); if (count == 0) - break; //Should just be "return TRUE", since setting count to 0 means all the remaining checks until return will be false anyway, but that doesn't match + break; //should be return TRUE, but that doesn't match } } // Check space in empty item slots - if (count > 0) //if (count !=0) also works here; both match + if (count > 0) { for (i = 0; i < gBagPockets[pocket].capacity; i++) { @@ -231,12 +233,12 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count) } else { - count = 0; //Should just be "return TRUE", since setting count to 0 means all the remaining checks until return will be false anyway, but that doesn't match + count = 0; //should be return TRUE, but that doesn't match break; } } } - if (count > 0) //if (count !=0) also works here; both match + if (count > 0) return FALSE; // No more item slots. The bag is full } diff --git a/src/item_menu.c b/src/item_menu.c index d40c3a12c7..931cba2bfb 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -41,7 +41,6 @@ #include "shop.h" #include "sound.h" #include "sprite.h" -#include "string.h" #include "strings.h" #include "string_util.h" #include "task.h" @@ -628,6 +627,7 @@ void CB2_Bag(void) bool8 SetupBagMenu(void) { + u32 index; u8 taskId; switch (gMain.state) @@ -919,14 +919,14 @@ void BagMenu_ItemPrintCallback(u8 windowId, s32 itemIndex, u8 y) if (gBagPositionStruct.pocket == BERRIES_POCKET) { - ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, BERRY_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); offset = GetStringRightAlignXOffset(7, gStringVar4, 119); BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0); } else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && ItemId_GetImportance(itemId) == FALSE) { - ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, BAG_ITEM_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); offset = GetStringRightAlignXOffset(7, gStringVar4, 119); BagMenu_Print(windowId, 7, gStringVar4, offset, y, 0, 0, -1, 0); @@ -1133,7 +1133,7 @@ void sub_81ABC3C(u8 a) void PrintItemDepositAmount(u8 windowId, s16 numDeposited) { - u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; + u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS; ConvertIntToDecimalStringN(gStringVar1, numDeposited, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0); @@ -1141,7 +1141,7 @@ void PrintItemDepositAmount(u8 windowId, s16 numDeposited) void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned) { - u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; + u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? BERRY_CAPACITY_DIGITS : BAG_ITEM_CAPACITY_DIGITS; ConvertIntToDecimalStringN(gStringVar1, numSold, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, -1, 0); @@ -1228,12 +1228,12 @@ static u8 GetSwitchBagPocketDirection(void) if (gBagMenu->pocketSwitchDisabled) return SWITCH_POCKET_NONE; LRKeys = GetLRKeysPressed(); - if (JOY_NEW(DPAD_LEFT) || LRKeys == MENU_L_PRESSED) + if ((JOY_NEW(DPAD_LEFT)) || LRKeys == MENU_L_PRESSED) { PlaySE(SE_SELECT); return SWITCH_POCKET_LEFT; } - if (JOY_NEW(DPAD_RIGHT) || LRKeys == MENU_R_PRESSED) + if ((JOY_NEW(DPAD_RIGHT)) || LRKeys == MENU_R_PRESSED) { PlaySE(SE_SELECT); return SWITCH_POCKET_RIGHT; @@ -1668,7 +1668,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); } } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if ((JOY_NEW(DPAD_RIGHT)) || GetLRKeysPressed() == MENU_R_PRESSED) { if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1)) { @@ -1761,7 +1761,7 @@ void BagMenu_TossItems(u8 taskId) s16* data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems); FillWindowPixelBuffer(1, PIXEL_FILL(0)); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); @@ -1804,7 +1804,7 @@ void BagMenu_ConfirmToss(u8 taskId) s16* data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s); FillWindowPixelBuffer(1, PIXEL_FILL(0)); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); @@ -2172,7 +2172,7 @@ static void BagMenu_TryDepositItem(u8 taskId) else if (AddPCItem(gSpecialVar_ItemId, tItemCount) == TRUE) { CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS); StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); gTasks[taskId].func = Task_ActuallyToss; @@ -2456,10 +2456,10 @@ static void RemoveMoneyWindow(void) void BagMenu_PrepareTMHMMoveWindow(void) { FillWindowPixelBuffer(3, PIXEL_FILL(0)); - blit_move_info_icon(3, 19, 0, 0); - blit_move_info_icon(3, 20, 0, 12); - blit_move_info_icon(3, 21, 0, 24); - blit_move_info_icon(3, 22, 0, 36); + BlitMenuInfoIcon(3, MENU_INFO_ICON_TYPE, 0, 0); + BlitMenuInfoIcon(3, MENU_INFO_ICON_POWER, 0, 12); + BlitMenuInfoIcon(3, MENU_INFO_ICON_ACCURACY, 0, 24); + BlitMenuInfoIcon(3, MENU_INFO_ICON_PP, 0, 36); CopyWindowToVram(3, 2); } @@ -2479,7 +2479,7 @@ void PrintTMHMMoveData(u16 itemId) else { moveId = ItemIdToBattleMoveId(itemId); - blit_move_info_icon(4, gBattleMoves[moveId].type + 1, 0, 0); + BlitMenuInfoIcon(4, gBattleMoves[moveId].type + 1, 0, 0); if (gBattleMoves[moveId].power <= 1) { text = gText_ThreeDashes; diff --git a/src/item_use.c b/src/item_use.c index f9d1ff824b..df6a35bc98 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -53,7 +53,7 @@ static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8); static u8 GetDirectionToHiddenItem(s16 distanceX, s16 distanceY); static void PlayerFaceHiddenItem(u8 a); static void CheckForHiddenItemsInMapConnection(u8 taskId); -static void sub_80FDC00(u8 taskId); +static void Task_OpenRegisteredPokeblockCase(u8 taskId); static void ItemUseOnFieldCB_Bike(u8 taskId); static void ItemUseOnFieldCB_Rod(u8); static void ItemUseOnFieldCB_Itemfinder(u8); @@ -69,7 +69,7 @@ static void Task_StartUseRepel(u8 taskId); static void Task_UseRepel(u8 taskId); static void Task_CloseCantUseKeyItemMessage(u8 taskId); static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 x, s16 y); -static void CB2_OpenPokeblockCaseOnField(void); +static void CB2_OpenPokeblockFromBag(void); // EWRAM variables EWRAM_DATA static void(*sItemUseOnFieldCB)(u8 taskId) = NULL; @@ -615,23 +615,23 @@ void ItemUseOutOfBattle_PokeblockCase(u8 taskId) } else if (gTasks[taskId].tUsingRegisteredKeyItem != TRUE) { - gBagMenu->exitCallback = CB2_OpenPokeblockCaseOnField; + gBagMenu->exitCallback = CB2_OpenPokeblockFromBag; Task_FadeAndCloseBagMenu(taskId); } else { - gFieldCallback = sub_80AF6D4; + gFieldCallback = FieldCB_ReturnToFieldNoScript; FadeScreen(FADE_TO_BLACK, 0); - gTasks[taskId].func = sub_80FDC00; + gTasks[taskId].func = Task_OpenRegisteredPokeblockCase; } } -static void CB2_OpenPokeblockCaseOnField(void) +static void CB2_OpenPokeblockFromBag(void) { OpenPokeblockCase(PBLOCK_CASE_FIELD, CB2_ReturnToBagMenuPocket); } -static void sub_80FDC00(u8 taskId) +static void Task_OpenRegisteredPokeblockCase(u8 taskId) { if (!gPaletteFade.active) { @@ -721,7 +721,7 @@ static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) static bool8 TryToWaterSudowoodo(void) { - s16 x, y; + u16 x, y; u8 z; u8 objId; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 41b28ec5f3..5e0ef0aa42 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -15,7 +15,6 @@ #include "string_util.h" #include "task.h" #include "text.h" -#include "constants/species.h" #include "save.h" #include "mystery_gift.h" @@ -876,7 +875,8 @@ static void sub_800F498(u16 *a0, u8 *a1) static bool32 RfuProcessEnqueuedRecvBlock(void) { - u8 i, j; + u8 i; + u8 j; u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))]; u8 sp48[2 * (CMD_LENGTH - 1)]; u8 status; @@ -933,14 +933,13 @@ static void HandleSendFailure(u8 unused, u32 flags) for (j = 0; j < 7; j++) { temp = j << 1; - sResendBlock16[j + 1] = (r10[i * 12 + temp + 1] << 8) | r10[i * 12 + temp]; + sResendBlock16[j + 1] = (r10[12 * i + temp + 1] << 8) | r10[12 * i + temp + 0]; } - for (j = 0; j < 7; j++) { temp = j << 1; sResendBlock8[temp + 1] = sResendBlock16[j] >> 8; - sResendBlock8[temp + 0] = sResendBlock16[j] & 0xff; + sResendBlock8[temp + 0] = sResendBlock16[j]; } RfuSendQueue_Enqueue(&Rfu.sendQueue, sResendBlock8); Rfu.sendBlock.failedFlags |= (1 << i); @@ -1024,7 +1023,8 @@ void Rfu_SetBerryBlenderLinkCallback(void) static void RfuHandleReceiveCommand(u8 unused) { - u16 i, j; + u16 i; + u16 j; for (i = 0; i < MAX_RFU_PLAYERS; i++) { @@ -1038,7 +1038,7 @@ static void RfuHandleReceiveCommand(u8 unused) if (gRfuLinkStatus->parentChild == MODE_CHILD) { Rfu.playerCount = gRecvCmds[i][1]; - Rfu.multiplayerId = sub_800F74C((u8 *)(&gRecvCmds[i][2])); + Rfu.multiplayerId = sub_800F74C((u8 *)(gRecvCmds[i] + 2)); } break; case RFUCMD_0x8800: @@ -1237,9 +1237,10 @@ void Rfu_SendPacket(void *data) bool32 Rfu_InitBlockSend(const u8 *src, size_t size) { bool8 r4; - if (Rfu.callback != NULL || gSendCmd[0] != 0) + if (Rfu.callback != NULL) + return FALSE; + if (gSendCmd[0] != 0) return FALSE; - if (Rfu.sendBlock.sending) { sRfuDebug.unk_83++; @@ -1417,12 +1418,16 @@ void Rfu_SetCloseLinkCallback(void) static void SendReadyExitStandbyUntilAllReady(void) { - u8 i, playerCount; + u8 playerCount; + u8 i; - if (GetMultiplayerId() != 0 && Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) + if (GetMultiplayerId() != 0) { - RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); - Rfu.resendExitStandbyTimer = 0; + if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60) + { + RfuPrepareSendBuffer(RFUCMD_READY_EXIT_STANDBY); + Rfu.resendExitStandbyTimer = 0; + } } playerCount = GetLinkPlayerCount(); for (i = 0; i < playerCount; i++) @@ -1452,7 +1457,8 @@ static void LinkLeaderReadyToExitStandby(void) // RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll static void Rfu_LinkStandby(void) { - u8 i, playerCount; + u8 i; + u8 playerCount; if (GetMultiplayerId() != 0) { @@ -1548,27 +1554,27 @@ static bool8 CheckForLeavingGroupMembers(void) bool8 memberLeft = FALSE; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_OK - || Rfu.partnerSendStatuses[i] == RFU_STATUS_JOIN_GROUP_NO) + if (Rfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK + || Rfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO) { - continue; - } - - if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS - || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) - { - if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) + if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS + || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { - Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; - Rfu.partnerRecvStatuses[i] = RFU_STATUS_10; - rfu_clearSlot(TYPE_NI_RECV, i); - rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1); - memberLeft = TRUE; + if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) + { + Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; + Rfu.partnerRecvStatuses[i] = RFU_STATUS_10; + rfu_clearSlot(TYPE_NI_RECV, i); + rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1); + memberLeft = TRUE; + } + + } + else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) + rfu_clearSlot(TYPE_NI_RECV, i); + { + } - } - else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) - { - rfu_clearSlot(TYPE_NI_RECV, i); } } return memberLeft; @@ -2044,7 +2050,8 @@ void sub_80110B8(u32 a0) if ((r8 >> i) & 1) { child_sprite_genders |= ((0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7)) << (numConnectedChildren << 3)); - if (++numConnectedChildren == a0 - 1) + numConnectedChildren++; + if (numConnectedChildren == a0 - 1) break; } } @@ -2089,7 +2096,8 @@ static void sub_80111FC(void) static void sub_801120C(u8 msg, u8 paramCount) { - u8 i, disconnectFlag = 0; + u8 i; + u8 disconnectFlag = 0; switch (msg) { case LMAN_MSG_INITIALIZE_COMPLETED: diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 821b2d1185..c6344f5036 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -309,7 +309,8 @@ static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = { void RfuRecvQueue_Reset(struct RfuRecvQueue *queue) { - s32 i, j; + s32 i; + s32 j; for (i = 0; i < RECV_QUEUE_NUM_SLOTS; i++) { @@ -326,7 +327,8 @@ void RfuRecvQueue_Reset(struct RfuRecvQueue *queue) void RfuSendQueue_Reset(struct RfuSendQueue *queue) { - s32 i, j; + s32 i; + s32 j; for (i = 0; i < SEND_QUEUE_NUM_SLOTS; i++) { @@ -343,7 +345,8 @@ void RfuSendQueue_Reset(struct RfuSendQueue *queue) static void RfuUnusedQueue_Reset(struct RfuUnusedQueue *queue) { - s32 i, j; + s32 i; + s32 j; for (i = 0; i < UNUSED_QUEUE_NUM_SLOTS; i++) { @@ -623,32 +626,30 @@ static void ASCIIToPkmnStr(u8 *pkmnStr, const u8 *asciiStr) static u8 GetConnectedChildStrength(u8 maxFlags) { u8 flagCount = 0; - u8 flags = gRfuLinkStatus->connSlotFlag; + u32 flags = gRfuLinkStatus->connSlotFlag; u8 i; if (gRfuLinkStatus->parentChild == MODE_PARENT) { - for (i = 0; i < RFU_CHILD_MAX; i++) + for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) { if (maxFlags == flagCount + 1) { return gRfuLinkStatus->strength[i]; - break; // This break is needed to match + break; } flagCount++; } - flags >>= 1; } } else { - for (i = 0; i < 4; i++) + for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) return gRfuLinkStatus->strength[i]; - flags >>= 1; } } return 0; @@ -922,7 +923,8 @@ void RecordMixTrainerNames(void) { if (gWirelessCommType != 0) { - s32 i, j; + s32 i; + s32 j; s32 nextSpace; s32 connectedTrainerRecordIndices[5]; struct TrainerNameRecord *newRecords = calloc(ARRAY_COUNT(gSaveBlock1Ptr->trainerNameRecords), sizeof(struct TrainerNameRecord)); diff --git a/src/list_menu.c b/src/list_menu.c index 7784dd338b..3e5642e4cf 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -312,7 +312,7 @@ static void ListMenuDummyTask(u8 taskId) } -u32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) { switch (sMysteryGiftLinkMenu.state) { @@ -439,12 +439,14 @@ s32 ListMenu_ProcessInput(u8 listTaskId) rightButton = FALSE; break; case LIST_MULTIPLE_SCROLL_DPAD: - leftButton = JOY_REPEAT(DPAD_LEFT); - rightButton = JOY_REPEAT(DPAD_RIGHT); + // note: JOY_REPEAT won't match here + leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT; + rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT; break; case LIST_MULTIPLE_SCROLL_L_R: - leftButton = JOY_REPEAT(L_BUTTON); - rightButton = JOY_REPEAT(R_BUTTON); + // same as above + leftButton = gMain.newAndRepeatedKeys & L_BUTTON; + rightButton = gMain.newAndRepeatedKeys & R_BUTTON; break; } @@ -1257,17 +1259,17 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st s32 i, j, id = 0; subsprites[id] = sSubsprite_RedOutline1; - subsprites[id].x = -120; - subsprites[id].y = -120; + subsprites[id].x = 136; + subsprites[id].y = 136; id++; subsprites[id] = sSubsprite_RedOutline2; subsprites[id].x = rowWidth + 128; - subsprites[id].y = -120; + subsprites[id].y = 136; id++; subsprites[id] = sSubsprite_RedOutline7; - subsprites[id].x = -120; + subsprites[id].x = 136; subsprites[id].y = rowHeight + 128; id++; @@ -1297,7 +1299,7 @@ void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 rowWidth, u16 rowHeight, st for (j = 8; j < rowHeight - 8; j += 8) { subsprites[id] = sSubsprite_RedOutline4; - subsprites[id].x = -120; + subsprites[id].x = 136; subsprites[id].y = j - 120; id++; diff --git a/src/lottery_corner.c b/src/lottery_corner.c index 5f68ad5169..2cbf0a8089 100644 --- a/src/lottery_corner.c +++ b/src/lottery_corner.c @@ -4,7 +4,6 @@ #include "pokemon.h" #include "constants/items.h" #include "random.h" -#include "constants/species.h" #include "string_util.h" #include "text.h" #include "pokemon_storage_system.h" diff --git a/src/m4a.c b/src/m4a.c index b8f9e21c11..e079ba4f63 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -10,7 +10,7 @@ BSS_CODE ALIGNED(4) char SoundMainRAM_Buffer[0x800] = {0}; struct SoundInfo gSoundInfo; struct PokemonCrySong gPokemonCrySongs[MAX_POKEMON_CRIES]; struct MusicPlayerInfo gPokemonCryMusicPlayers[MAX_POKEMON_CRIES]; -void *gMPlayJumpTable[36]; +MPlayFunc gMPlayJumpTable[36]; struct CgbChannel gCgbChans[4]; struct MusicPlayerTrack gPokemonCryTracks[MAX_POKEMON_CRIES * 2]; struct PokemonCrySong gPokemonCrySong; @@ -22,7 +22,8 @@ u8 gMPlayMemAccArea[0x10]; u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) { - u32 val1, val2; + u32 val1; + u32 val2; u32 fineAdjustShifted = fineAdjust << 24; if (key > 178) @@ -292,7 +293,7 @@ void MPlayExtender(struct CgbChannel *cgbChans) gMPlayJumpTable[32] = FadeOutBody; gMPlayJumpTable[33] = TrkVolPitSet; - soundInfo->cgbChans = (struct CgbChannel *)cgbChans; + soundInfo->cgbChans = cgbChans; soundInfo->CgbSound = CgbSound; soundInfo->CgbOscOff = CgbOscOff; soundInfo->MidiKeyToCgbFreq = MidiKeyToCgbFreq; @@ -300,13 +301,13 @@ void MPlayExtender(struct CgbChannel *cgbChans) CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4); - cgbChans[0].ty = 1; + cgbChans[0].type = 1; cgbChans[0].panMask = 0x11; - cgbChans[1].ty = 2; + cgbChans[1].type = 2; cgbChans[1].panMask = 0x22; - cgbChans[2].ty = 3; + cgbChans[2].type = 3; cgbChans[2].panMask = 0x44; - cgbChans[3].ty = 4; + cgbChans[3].type = 4; cgbChans[3].panMask = 0x88; soundInfo->ident = ident; @@ -314,7 +315,7 @@ void MPlayExtender(struct CgbChannel *cgbChans) void MusicPlayerJumpTableCopy(void) { - asm("svc 0x2A"); + asm("swi 0x2A"); } void ClearChain(void *x) @@ -351,10 +352,10 @@ void SoundInit(struct SoundInfo *soundInfo) | SOUND_ALL_MIX_FULL; REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40; - REG_DMA1SAD = (u32)soundInfo->pcmBuffer; - REG_DMA1DAD = (u32)®_FIFO_A; - REG_DMA2SAD = (u32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; - REG_DMA2DAD = (u32)®_FIFO_B; + REG_DMA1SAD = (s32)soundInfo->pcmBuffer; + REG_DMA1DAD = (s32)®_FIFO_A; + REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE; + REG_DMA2DAD = (s32)®_FIFO_B; SOUND_INFO_PTR = soundInfo; CpuFill32(0, soundInfo, sizeof(struct SoundInfo)); @@ -363,13 +364,13 @@ void SoundInit(struct SoundInfo *soundInfo) soundInfo->masterVolume = 15; soundInfo->plynote = ply_note; soundInfo->CgbSound = DummyFunc; - soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; - soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; - soundInfo->ExtVolPit = (void (*)(struct MusicPlayerInfo *, struct MusicPlayerTrack *))DummyFunc; + soundInfo->CgbOscOff = (CgbOscOffFunc)DummyFunc; + soundInfo->MidiKeyToCgbFreq = (MidiKeyToCgbFreqFunc)DummyFunc; + soundInfo->ExtVolPit = (ExtVolPitFunc)DummyFunc; MPlayJumpTableCopy(gMPlayJumpTable); - soundInfo->MPlayJumpTable = (void (**)())gMPlayJumpTable; + soundInfo->MPlayJumpTable = gMPlayJumpTable; SampleFreqSet(SOUND_MODE_FREQ_13379); @@ -380,7 +381,7 @@ void SampleFreqSet(u32 freq) { struct SoundInfo *soundInfo = SOUND_INFO_PTR; - freq = (freq & SOUND_MODE_FREQ) >> SOUND_MODE_FREQ_SHIFT; + freq = (freq & 0xF0000) >> 16; soundInfo->freq = freq; soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1]; soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank; @@ -431,9 +432,14 @@ void m4aSoundMode(u32 mode) soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT; - for (temp = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; temp != 0; temp--,chan++) + temp = MAX_DIRECTSOUND_CHANNELS; + chan = &soundInfo->chans[0]; + + while (temp != 0) { - chan->status = 0; + chan->statusFlags = 0; + temp--; + chan++; } } @@ -463,28 +469,37 @@ void m4aSoundMode(u32 mode) void SoundClear(void) { - s32 i; struct SoundInfo *soundInfo = SOUND_INFO_PTR; - struct SoundChannel *chan; + s32 i; + void *chan; if (soundInfo->ident != ID_NUMBER) return; soundInfo->ident++; - for (i = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; i > 0; i--,chan++) + i = MAX_DIRECTSOUND_CHANNELS; + chan = &soundInfo->chans[0]; + + while (i > 0) { - chan->status = 0; + ((struct SoundChannel *)chan)->statusFlags = 0; + i--; + chan = (void *)((s32)chan + sizeof(struct SoundChannel)); } - chan = (struct SoundChannel *)soundInfo->cgbChans; + chan = soundInfo->cgbChans; if (chan) { - for (i=1; i<=4; i++,chan++) + i = 1; + + while (i <= 4) { soundInfo->CgbOscOff(i); - chan->status = 0; + ((struct CgbChannel *)chan)->statusFlags = 0; + i++; + chan = (void *)((s32)chan + sizeof(struct CgbChannel)); } } @@ -495,20 +510,21 @@ void m4aSoundVSyncOff(void) { struct SoundInfo *soundInfo = SOUND_INFO_PTR; - if (soundInfo->ident < ID_NUMBER || soundInfo->ident > ID_NUMBER + 1) - return; - soundInfo->ident += 10; + if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1) + { + soundInfo->ident += 10; - if (REG_DMA1CNT & (DMA_REPEAT << 16)) - REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + if (REG_DMA1CNT & (DMA_REPEAT << 16)) + REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - if (REG_DMA2CNT & (DMA_REPEAT << 16)) - REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + if (REG_DMA2CNT & (DMA_REPEAT << 16)) + REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - REG_DMA1CNT_H = DMA_32BIT; - REG_DMA2CNT_H = DMA_32BIT; + REG_DMA1CNT_H = DMA_32BIT; + REG_DMA2CNT_H = DMA_32BIT; - CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); + CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); + } } void m4aSoundVSyncOn(void) @@ -556,15 +572,18 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track tracks++; } - if (soundInfo->func != 0) + // append music player and MPlayMain to linked list + + if (soundInfo->MPlayMainHead != NULL) { - mplayInfo->func = soundInfo->func; - mplayInfo->intp = soundInfo->intp; - soundInfo->func = 0; + mplayInfo->MPlayMainNext = soundInfo->MPlayMainHead; + mplayInfo->musicPlayerNext = soundInfo->musicPlayerHead; + // NULL assignment semantically useless, but required for match + soundInfo->MPlayMainHead = NULL; } - soundInfo->intp = (u32)mplayInfo; - soundInfo->func = MPlayMain; + soundInfo->musicPlayerHead = mplayInfo; + soundInfo->MPlayMainHead = MPlayMain; soundInfo->ident = ID_NUMBER; mplayInfo->ident = ID_NUMBER; } @@ -598,18 +617,25 @@ void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader mplayInfo->tempoC = 0; mplayInfo->fadeOI = 0; - for (i = 0, track = mplayInfo->tracks; i < songHeader->trackCount && i < mplayInfo->trackCount; i++, track++) + i = 0; + track = mplayInfo->tracks; + + while (i < songHeader->trackCount && i < mplayInfo->trackCount) { TrackStop(mplayInfo, track); track->flags = MPT_FLG_EXIST | MPT_FLG_START; track->chan = 0; track->cmdPtr = songHeader->part[i]; + i++; + track++; } - for (; i < mplayInfo->trackCount; i++, track++) + while (i < mplayInfo->trackCount) { TrackStop(mplayInfo, track); track->flags = 0; + i++; + track++; } if (songHeader->reverb & SOUND_MODE_REVERB_SET) @@ -630,9 +656,14 @@ void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo) mplayInfo->ident++; mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE; - for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) { TrackStop(mplayInfo, track); + i--; + track++; } mplayInfo->ident = ID_NUMBER; @@ -643,28 +674,17 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) s32 i; struct MusicPlayerTrack *track; u16 fadeOV; -#ifdef NONMATCHING - u16 mask; -#else - register u16 mask asm("r2"); -#endif // NONMATCHING if (mplayInfo->fadeOI == 0) return; - - mplayInfo->fadeOC--; - mask = 0xFFFF; - - if (mplayInfo->fadeOC != 0) + if (--mplayInfo->fadeOC != 0) return; mplayInfo->fadeOC = mplayInfo->fadeOI; if (mplayInfo->fadeOV & FADE_IN) { - mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT); - - if ((u16)(mplayInfo->fadeOV & mask) >= (64 << FADE_VOL_SHIFT)) + if ((u16)(mplayInfo->fadeOV += (4 << FADE_VOL_SHIFT)) >= (64 << FADE_VOL_SHIFT)) { mplayInfo->fadeOV = (64 << FADE_VOL_SHIFT); mplayInfo->fadeOI = 0; @@ -672,12 +692,12 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) } else { - mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT); - - if ((s16)(mplayInfo->fadeOV & mask) <= 0) + if ((s16)(mplayInfo->fadeOV -= (4 << FADE_VOL_SHIFT)) <= 0) { + i = mplayInfo->trackCount; + track = mplayInfo->tracks; - for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) + while (i > 0) { u32 val; @@ -689,6 +709,9 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) if (!val) track->flags = 0; + + i--; + track++; } if (mplayInfo->fadeOV & TEMPORARY_FADE) @@ -701,7 +724,10 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) } } - for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++) + i = mplayInfo->trackCount; + track = mplayInfo->tracks; + + while (i > 0) { if (track->flags & MPT_FLG_EXIST) { @@ -710,6 +736,9 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo) track->volX = (fadeOV >> FADE_VOL_SHIFT); track->flags |= MPT_FLG_VOLCHG; } + + i--; + track++; } } @@ -717,7 +746,7 @@ void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tr { if (track->flags & MPT_FLG_VOLSET) { - u32 x; + s32 x; s32 y; x = (u32)(track->vol * track->volX) >> 5; @@ -858,7 +887,7 @@ void CgbModVol(struct CgbChannel *chan) if ((soundInfo->mode & 1) || !CgbPan(chan)) { chan->pan = 0xFF; - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; + chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) >> 4; } else { @@ -869,12 +898,12 @@ void CgbModVol(struct CgbChannel *chan) asm("" : : : "memory"); #endif - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) >> 4; - if (chan->eg > 15) - chan->eg = 15; + chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) >> 4; + if (chan->envelopeGoal > 15) + chan->envelopeGoal = 15; } - chan->sg = (chan->eg * chan->su + 15) >> 4; + chan->sustainGoal = (chan->envelopeGoal * chan->sustain + 15) >> 4; chan->pan &= chan->panMask; } @@ -882,7 +911,7 @@ void CgbSound(void) { s32 ch; struct CgbChannel *channels; - s32 evAdd; + s32 envelopeStepTimeAndDir; s32 prevC15; struct SoundInfo *soundInfo = SOUND_INFO_PTR; vu8 *nrx0ptr; @@ -901,9 +930,10 @@ void CgbSound(void) for (ch = 1, channels = soundInfo->cgbChans; ch <= 4; ch++, channels++) { - if (!(channels->sf & 0xc7)) + if (!(channels->statusFlags & SOUND_CHANNEL_SF_ON)) continue; + /* 1. determine hardware channel registers */ switch (ch) { case 1: @@ -937,243 +967,233 @@ void CgbSound(void) } prevC15 = soundInfo->c15; - evAdd = *nrx2ptr; + envelopeStepTimeAndDir = *nrx2ptr; - if (channels->sf & 0x80) + /* 2. calculate envelope volume */ + if (channels->statusFlags & SOUND_CHANNEL_SF_START) { - if (!(channels->sf & 0x40)) + if (!(channels->statusFlags & SOUND_CHANNEL_SF_STOP)) { - channels->sf = 3; - channels->mo = 3; + channels->statusFlags = SOUND_CHANNEL_SF_ENV_ATTACK; + channels->modify = CGB_CHANNEL_MO_PIT | CGB_CHANNEL_MO_VOL; CgbModVol(channels); switch (ch) { case 1: - *nrx0ptr = channels->sw; + *nrx0ptr = channels->sweep; // fallthrough case 2: - *nrx1ptr = ((u32)channels->wp << 6) + channels->le; - goto loc_82E0E30; + *nrx1ptr = ((u32)channels->wavePointer << 6) + channels->length; + goto init_env_step_time_dir; case 3: - if ((u32)channels->wp != channels->cp) + if (channels->wavePointer != channels->currentPointer) { *nrx0ptr = 0x40; - REG_WAVE_RAM0 = channels->wp[0]; - REG_WAVE_RAM1 = channels->wp[1]; - REG_WAVE_RAM2 = channels->wp[2]; - REG_WAVE_RAM3 = channels->wp[3]; - channels->cp = (u32)channels->wp; + REG_WAVE_RAM0 = channels->wavePointer[0]; + REG_WAVE_RAM1 = channels->wavePointer[1]; + REG_WAVE_RAM2 = channels->wavePointer[2]; + REG_WAVE_RAM3 = channels->wavePointer[3]; + channels->currentPointer = channels->wavePointer; } *nrx0ptr = 0; - *nrx1ptr = channels->le; - if (channels->le) - channels->n4 = -64; + *nrx1ptr = channels->length; + if (channels->length) + channels->n4 = 0xC0; else - channels->n4 = -128; + channels->n4 = 0x80; break; default: - *nrx1ptr = channels->le; - *nrx3ptr = (u32)channels->wp << 3; - loc_82E0E30: - evAdd = channels->at + 8; - if (channels->le) - channels->n4 = 64; + *nrx1ptr = channels->length; + *nrx3ptr = (u32)channels->wavePointer << 3; + init_env_step_time_dir: + envelopeStepTimeAndDir = channels->attack + CGB_NRx2_ENV_DIR_INC; + if (channels->length) + channels->n4 = 0x40; else - channels->n4 = 0; + channels->n4 = 0x00; break; } - channels->ec = channels->at; - if ((s8)(channels->at & mask)) + channels->envelopeCounter = channels->attack; + if ((s8)(channels->attack & mask)) { - channels->ev = 0; - goto EC_MINUS; + channels->envelopeVolume = 0; + goto envelope_step_complete; } else { - goto loc_82E0F96; + // skip attack phase if attack is instantaneous (=0) + goto envelope_decay_start; } } else { - goto loc_82E0E82; + goto oscillator_off; } } - else if (channels->sf & 0x04) + else if (channels->statusFlags & SOUND_CHANNEL_SF_IEC) { - channels->echoLength--; - if ((s8)(channels->echoLength & mask) <= 0) + channels->pseudoEchoLength--; + if ((s8)(channels->pseudoEchoLength & mask) <= 0) { - loc_82E0E82: + oscillator_off: CgbOscOff(ch); - channels->sf = 0; - goto LAST_LABEL; + channels->statusFlags = 0; + goto channel_complete; } - goto loc_82E0FD6; + goto envelope_complete; } - else if ((channels->sf & 0x40) && (channels->sf & 0x03)) + else if ((channels->statusFlags & SOUND_CHANNEL_SF_STOP) && (channels->statusFlags & SOUND_CHANNEL_SF_ENV)) { - channels->sf &= 0xfc; - channels->ec = channels->re; - if ((s8)(channels->re & mask)) + channels->statusFlags &= ~SOUND_CHANNEL_SF_ENV; + channels->envelopeCounter = channels->release; + if ((s8)(channels->release & mask)) { - channels->mo |= 1; + channels->modify |= CGB_CHANNEL_MO_VOL; if (ch != 3) - { - evAdd = channels->re; - } - goto EC_MINUS; + envelopeStepTimeAndDir = channels->release | CGB_NRx2_ENV_DIR_DEC; + goto envelope_step_complete; } else { - goto loc_82E0F02; + goto envelope_pseudoecho_start; } } else { - loc_82E0ED0: - if (channels->ec == 0) + envelope_step_repeat: + if (channels->envelopeCounter == 0) { if (ch == 3) - { - channels->mo |= 1; - } - CgbModVol(channels); - if ((channels->sf & 0x3) == 0) - { - channels->ev--; - if ((s8)(channels->ev & mask) <= 0) - { - loc_82E0F02: - channels->ev = ((channels->eg * channels->echoVolume) + 0xFF) >> 8; - if (channels->ev) - { - channels->sf |= 0x4; - channels->mo |= 1; - if (ch != 3) - { - evAdd = 8; - } - goto loc_82E0FD6; - } - else - { - goto loc_82E0E82; - } - } - else - { - channels->ec = channels->re; - } - } - else if ((channels->sf & 0x3) == 1) - { - loc_82E0F3A: - channels->ev = channels->sg; - channels->ec = 7; - } - else if ((channels->sf & 0x3) == 2) - { - int ev, sg; + channels->modify |= CGB_CHANNEL_MO_VOL; - channels->ev--; - ev = (s8)(channels->ev & mask); - sg = (s8)(channels->sg); - if (ev <= sg) + CgbModVol(channels); + if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == SOUND_CHANNEL_SF_ENV_RELEASE) + { + channels->envelopeVolume--; + if ((s8)(channels->envelopeVolume & mask) <= 0) { - loc_82E0F5A: - if (channels->su == 0) + envelope_pseudoecho_start: + channels->envelopeVolume = ((channels->envelopeGoal * channels->pseudoEchoVolume) + 0xFF) >> 8; + if (channels->envelopeVolume) { - channels->sf &= 0xfc; - goto loc_82E0F02; + channels->statusFlags |= SOUND_CHANNEL_SF_IEC; + channels->modify |= CGB_CHANNEL_MO_VOL; + if (ch != 3) + envelopeStepTimeAndDir = 0 | CGB_NRx2_ENV_DIR_INC; + goto envelope_complete; } else { - channels->sf--; - channels->mo |= 1; - if (ch != 3) - { - evAdd = 8; - } - goto loc_82E0F3A; + goto oscillator_off; } } else { - channels->ec = channels->de; + channels->envelopeCounter = channels->release; + } + } + else if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == SOUND_CHANNEL_SF_ENV_SUSTAIN) + { + envelope_sustain: + channels->envelopeVolume = channels->sustainGoal; + channels->envelopeCounter = 7; + } + else if ((channels->statusFlags & SOUND_CHANNEL_SF_ENV) == SOUND_CHANNEL_SF_ENV_DECAY) + { + int envelopeVolume, sustainGoal; + + channels->envelopeVolume--; + envelopeVolume = (s8)(channels->envelopeVolume & mask); + sustainGoal = (s8)(channels->sustainGoal); + if (envelopeVolume <= sustainGoal) + { + envelope_sustain_start: + if (channels->sustain == 0) + { + channels->statusFlags &= ~SOUND_CHANNEL_SF_ENV; + goto envelope_pseudoecho_start; + } + else + { + channels->statusFlags--; + channels->modify |= CGB_CHANNEL_MO_VOL; + if (ch != 3) + envelopeStepTimeAndDir = 0 | CGB_NRx2_ENV_DIR_INC; + goto envelope_sustain; + } + } + else + { + channels->envelopeCounter = channels->decay; } } else { - channels->ev++; - if ((u8)(channels->ev & mask) >= channels->eg) + channels->envelopeVolume++; + if ((u8)(channels->envelopeVolume & mask) >= channels->envelopeGoal) { - loc_82E0F96: - channels->sf--; - channels->ec = channels->de; - if ((u8)(channels->ec & mask)) + envelope_decay_start: + channels->statusFlags--; + channels->envelopeCounter = channels->decay; + if ((u8)(channels->envelopeCounter & mask)) { - channels->mo |= 1; - channels->ev = channels->eg; + channels->modify |= CGB_CHANNEL_MO_VOL; + channels->envelopeVolume = channels->envelopeGoal; if (ch != 3) - { - evAdd = channels->de; - } + envelopeStepTimeAndDir = channels->decay | CGB_NRx2_ENV_DIR_DEC; } else { - goto loc_82E0F5A; + goto envelope_sustain_start; } } else { - channels->ec = channels->at; + channels->envelopeCounter = channels->attack; } } } } - EC_MINUS: - channels->ec--; + envelope_step_complete: + // every 15 frames, envelope calculation has to be done twice + // to keep up with the hardware envelope rate (1/64 s) + channels->envelopeCounter--; if (prevC15 == 0) { prevC15--; - goto loc_82E0ED0; + goto envelope_step_repeat; } - loc_82E0FD6: - if (channels->mo & 0x2) + envelope_complete: + /* 3. apply pitch to HW registers */ + if (channels->modify & CGB_CHANNEL_MO_PIT) { - if (ch < 4 && (channels->ty & 0x08)) + if (ch < 4 && (channels->type & TONEDATA_TYPE_FIX)) { - int biasH = REG_SOUNDBIAS_H; + int dac_pwm_rate = REG_SOUNDBIAS_H; - if (biasH < 64) - { - channels->fr = (channels->fr + 2) & 0x7fc; - } - else if (biasH < 128) - { - channels->fr = (channels->fr + 1) & 0x7fe; - } + if (dac_pwm_rate < 0x40) // if PWM rate = 32768 Hz + channels->frequency = (channels->frequency + 2) & 0x7fc; + else if (dac_pwm_rate < 0x80) // if PWM rate = 65536 Hz + channels->frequency = (channels->frequency + 1) & 0x7fe; } + if (ch != 4) - { - *nrx3ptr = channels->fr; - } + *nrx3ptr = channels->frequency; else - { - *nrx3ptr = (*nrx3ptr & 0x08) | channels->fr; - } - channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->fr) + 1)); + *nrx3ptr = (*nrx3ptr & 0x08) | channels->frequency; + channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->frequency) + 1)); *nrx4ptr = (s8)(channels->n4 & mask); } - if (channels->mo & 1) + /* 4. apply envelope & volume to HW registers */ + if (channels->modify & CGB_CHANNEL_MO_VOL) { REG_NR51 = (REG_NR51 & ~channels->panMask) | channels->pan; if (ch == 3) { - *nrx2ptr = gCgb3Vol[channels->ev]; + *nrx2ptr = gCgb3Vol[channels->envelopeVolume]; if (channels->n4 & 0x80) { *nrx0ptr = 0x80; @@ -1183,18 +1203,16 @@ void CgbSound(void) } else { - evAdd &= 0xf; - *nrx2ptr = (channels->ev << 4) + evAdd; + envelopeStepTimeAndDir &= 0xf; + *nrx2ptr = (channels->envelopeVolume << 4) + envelopeStepTimeAndDir; *nrx4ptr = channels->n4 | 0x80; if (ch == 1 && !(*nrx0ptr & 0x08)) - { *nrx4ptr = channels->n4 | 0x80; - } } } - LAST_LABEL: - channels->mo = 0; + channel_complete: + channels->modify = 0; } } @@ -1478,8 +1496,8 @@ void ply_memacc(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *trac cond_true: { - void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[1]); - func(mplayInfo, track); + // *& is required for matching + (*&gMPlayJumpTable[1])(mplayInfo, track); return; } @@ -1497,8 +1515,7 @@ void ply_xcmd(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) void ply_xxx(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - void (*func)(struct MusicPlayerInfo *, struct MusicPlayerTrack *) = *(&gMPlayJumpTable[0]); - func(mplayInfo, track); + gMPlayJumpTable[0](mplayInfo, track); } #define READ_XCMD_BYTE(var, n) \ @@ -1554,13 +1571,13 @@ void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - track->echoVolume = *track->cmdPtr; + track->pseudoEchoVolume = *track->cmdPtr; track->cmdPtr++; } void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - track->echoLength = *track->cmdPtr; + track->pseudoEchoLength = *track->cmdPtr; track->cmdPtr++; } diff --git a/src/m4a_1.s b/src/m4a_1.s index 290404ad04..d72336c182 100644 --- a/src/m4a_1.s +++ b/src/m4a_1.s @@ -22,13 +22,13 @@ SoundMain: ldr r0, lt_SOUND_INFO_PTR ldr r0, [r0] ldr r2, lt_ID_NUMBER - ldr r3, [r0, #o_SoundInfo_ident] + ldr r3, [r0, o_SoundInfo_ident] cmp r2, r3 beq SoundMain_1 bx lr @ Exit the function if ident doesn't match ID_NUMBER. SoundMain_1: adds r3, 1 - str r3, [r0, #o_SoundInfo_ident] + str r3, [r0, o_SoundInfo_ident] push {r4-r7,lr} mov r1, r8 mov r2, r9 @@ -36,7 +36,7 @@ SoundMain_1: mov r4, r11 push {r0-r4} sub sp, 0x18 - ldrb r1, [r0, #o_SoundInfo_maxLines] + ldrb r1, [r0, o_SoundInfo_maxLines] cmp r1, 0 @ if maxLines is 0, there is no maximum beq SoundMain_3 ldr r2, lt_REG_VCOUNT @@ -48,24 +48,24 @@ SoundMain_2: adds r1, r2 SoundMain_3: str r1, [sp, 0x14] - ldr r3, [r0, #o_SoundInfo_func] + ldr r3, [r0, o_SoundInfo_MPlayMainHead] cmp r3, 0 beq SoundMain_4 - ldr r0, [r0, #o_SoundInfo_intp] + ldr r0, [r0, o_SoundInfo_musicPlayerHead] bl _081DD25E ldr r0, [sp, 0x18] SoundMain_4: - ldr r3, [r0, #o_SoundInfo_CgbSound] + ldr r3, [r0, o_SoundInfo_CgbSound] bl _081DD25E ldr r0, [sp, 0x18] - ldr r3, [r0, #o_SoundInfo_pcmSamplesPerVBlank] + ldr r3, [r0, o_SoundInfo_pcmSamplesPerVBlank] mov r8, r3 ldr r5, lt_o_SoundInfo_pcmBuffer adds r5, r0 - ldrb r4, [r0, #o_SoundInfo_pcmDmaCounter] + ldrb r4, [r0, o_SoundInfo_pcmDmaCounter] subs r7, r4, 1 bls SoundMain_5 - ldrb r1, [r0, #o_SoundInfo_pcmDmaPeriod] + ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod] subs r1, r7 mov r2, r8 muls r2, r1 @@ -87,7 +87,7 @@ lt_PCM_DMA_BUF_SIZE: .word PCM_DMA_BUF_SIZE thumb_func_start SoundMainRAM SoundMainRAM: - ldrb r3, [r0, #o_SoundInfo_reverb] + ldrb r3, [r0, o_SoundInfo_reverb] cmp r3, 0 beq SoundMainRAM_NoReverb adr r1, SoundMainRAM_Reverb @@ -95,7 +95,7 @@ SoundMainRAM: .arm SoundMainRAM_Reverb: cmp r4, 0x2 - addeq r7, r0, #o_SoundInfo_pcmBuffer + addeq r7, r0, o_SoundInfo_pcmBuffer addne r7, r5, r8 mov r4, r8 _081DCEC4: @@ -145,14 +145,14 @@ SoundMainRAM_NoReverb_Loop: bgt SoundMainRAM_NoReverb_Loop _081DCF36: ldr r4, [sp, 0x18] - ldr r0, [r4, #o_SoundInfo_divFreq] + ldr r0, [r4, o_SoundInfo_divFreq] mov r12, r0 - ldrb r0, [r4, #o_SoundInfo_maxChans] - adds r4, #o_SoundInfo_chans + ldrb r0, [r4, o_SoundInfo_maxChans] + adds r4, o_SoundInfo_chans SoundMainRAM_ChanLoop: str r0, [sp, 0x4] - ldr r3, [r4, #o_SoundChannel_wav] + ldr r3, [r4, o_SoundChannel_wav] ldr r0, [sp, 0x14] cmp r0, 0 beq _081DCF60 @@ -169,145 +169,145 @@ _081DCF54: .pool _081DCF60: - ldrb r6, [r4, #o_SoundChannel_status] - movs r0, 0xC7 + ldrb r6, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r6 bne _081DCF6A b _081DD240 _081DCF6A: - movs r0, 0x80 + movs r0, SOUND_CHANNEL_SF_START tst r0, r6 beq _081DCFA0 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r6 bne _081DCFB0 - movs r6, 0x3 - strb r6, [r4, #o_SoundChannel_status] + movs r6, SOUND_CHANNEL_SF_ENV_ATTACK + strb r6, [r4, o_SoundChannel_statusFlags] adds r0, r3, 0 - adds r0, 0x10 - ldr r1, [r4, #o_SoundChannel_ct] + adds r0, o_WaveData_data + ldr r1, [r4, o_SoundChannel_count] adds r0, r1 - str r0, [r4, #o_SoundChannel_cp] - ldr r0, [r3, 0xC] + str r0, [r4, o_SoundChannel_currentPointer] + ldr r0, [r3, o_WaveData_size] subs r0, r1 - str r0, [r4, #o_SoundChannel_ct] + str r0, [r4, o_SoundChannel_count] movs r5, 0 - strb r5, [r4, #o_SoundChannel_ev] - str r5, [r4, #o_SoundChannel_fw] - ldrb r2, [r3, 0x3] - movs r0, 0xC0 + strb r5, [r4, o_SoundChannel_envelopeVolume] + str r5, [r4, o_SoundChannel_fw] + ldrb r2, [r3, o_WaveData_flags] + movs r0, WAVE_DATA_FLAG_LOOP tst r0, r2 beq _081DCFF8 - movs r0, 0x10 + movs r0, SOUND_CHANNEL_SF_LOOP orrs r6, r0 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DCFF8 _081DCFA0: - ldrb r5, [r4, #o_SoundChannel_ev] - movs r0, 0x4 + ldrb r5, [r4, o_SoundChannel_envelopeVolume] + movs r0, SOUND_CHANNEL_SF_IEC tst r0, r6 beq _081DCFB6 - ldrb r0, [r4, #o_SoundChannel_iel] + ldrb r0, [r4, o_SoundChannel_pseudoEchoLength] subs r0, 1 - strb r0, [r4, #o_SoundChannel_iel] + strb r0, [r4, o_SoundChannel_pseudoEchoLength] bhi _081DD006 _081DCFB0: movs r0, 0 - strb r0, [r4, #o_SoundChannel_status] + strb r0, [r4, o_SoundChannel_statusFlags] b _081DD240 _081DCFB6: - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r6 beq _081DCFD6 - ldrb r0, [r4, #o_SoundChannel_release] + ldrb r0, [r4, o_SoundChannel_release] muls r5, r0 lsrs r5, 8 - ldrb r0, [r4, #o_SoundChannel_iev] + ldrb r0, [r4, o_SoundChannel_pseudoEchoVolume] cmp r5, r0 bhi _081DD006 _081DCFC8: - ldrb r5, [r4, #o_SoundChannel_iev] + ldrb r5, [r4, o_SoundChannel_pseudoEchoVolume] cmp r5, 0 beq _081DCFB0 - movs r0, 0x4 + movs r0, SOUND_CHANNEL_SF_IEC orrs r6, r0 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DD006 _081DCFD6: - movs r2, 0x3 + movs r2, SOUND_CHANNEL_SF_ENV ands r2, r6 - cmp r2, 0x2 + cmp r2, SOUND_CHANNEL_SF_ENV_DECAY bne _081DCFF4 - ldrb r0, [r4, #o_SoundChannel_decay] + ldrb r0, [r4, o_SoundChannel_decay] muls r5, r0 lsrs r5, 8 - ldrb r0, [r4, #o_SoundChannel_sustain] + ldrb r0, [r4, o_SoundChannel_sustain] cmp r5, r0 bhi _081DD006 adds r5, r0, 0 beq _081DCFC8 subs r6, 0x1 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] b _081DD006 _081DCFF4: - cmp r2, 0x3 + cmp r2, SOUND_CHANNEL_SF_ENV_ATTACK bne _081DD006 _081DCFF8: - ldrb r0, [r4, #o_SoundChannel_attack] + ldrb r0, [r4, o_SoundChannel_attack] adds r5, r0 cmp r5, 0xFF bcc _081DD006 movs r5, 0xFF subs r6, 0x1 - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] _081DD006: - strb r5, [r4, #o_SoundChannel_ev] + strb r5, [r4, o_SoundChannel_envelopeVolume] ldr r0, [sp, 0x18] - ldrb r0, [r0, #o_SoundChannel_release] + ldrb r0, [r0, o_SoundChannel_release] adds r0, 0x1 muls r0, r5 lsrs r5, r0, 4 - ldrb r0, [r4, #o_SoundChannel_rightVolume] + ldrb r0, [r4, o_SoundChannel_rightVolume] muls r0, r5 lsrs r0, 8 - strb r0, [r4, #o_SoundChannel_er] - ldrb r0, [r4, #o_SoundChannel_leftVolume] + strb r0, [r4, o_SoundChannel_envelopeVolumeRight] + ldrb r0, [r4, o_SoundChannel_leftVolume] muls r0, r5 lsrs r0, 8 - strb r0, [r4, #o_SoundChannel_el] - movs r0, 0x10 + strb r0, [r4, o_SoundChannel_envelopeVolumeLeft] + movs r0, SOUND_CHANNEL_SF_LOOP ands r0, r6 str r0, [sp, 0x10] beq _081DD03A adds r0, r3, 0 - adds r0, 0x10 - ldr r1, [r3, 0x8] + adds r0, o_WaveData_data + ldr r1, [r3, o_WaveData_loopStart] adds r0, r1 str r0, [sp, 0xC] - ldr r0, [r3, 0xC] + ldr r0, [r3, o_WaveData_size] subs r0, r1 str r0, [sp, 0x10] _081DD03A: ldr r5, [sp, 0x8] - ldr r2, [r4, #o_SoundChannel_ct] - ldr r3, [r4, #o_SoundChannel_cp] + ldr r2, [r4, o_SoundChannel_count] + ldr r3, [r4, o_SoundChannel_currentPointer] adr r0, _081DD044 bx r0 .arm _081DD044: str r8, [sp] - ldr r9, [r4, #o_SoundChannel_fw] - ldrb r10, [r4, #o_SoundChannel_er] - ldrb r11, [r4, #o_SoundChannel_el] - ldrb r0, [r4, #o_SoundChannel_type] - tst r0, 0x30 + ldr r9, [r4, o_SoundChannel_fw] + ldrb r10, [r4, o_SoundChannel_envelopeVolumeRight] + ldrb r11, [r4, o_SoundChannel_envelopeVolumeLeft] + ldrb r0, [r4, o_SoundChannel_type] + tst r0, TONEDATA_TYPE_CMP | TONEDATA_TYPE_REV beq _081DD068 bl sub_82DF49C b _081DD228 _081DD068: mov r10, r10, lsl 16 mov r11, r11, lsl 16 - ldrb r0, [r4, #o_SoundChannel_type] + ldrb r0, [r4, o_SoundChannel_type] tst r0, 0x8 beq _081DD19C _081DD07C: @@ -324,7 +324,7 @@ _081DD07C: moveq r2, 0x4 _081DD0A8: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD0B0: ldrsb r0, [r3], 0x1 mul r1, r10, r0 @@ -335,7 +335,7 @@ _081DD0B0: add r7, r1, r7, ror 8 adds r5, r5, 0x40000000 bcc _081DD0B0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD0A8 @@ -343,7 +343,7 @@ _081DD0B0: beq _081DD22C _081DD0EC: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD0F4: ldrsb r0, [r3], 0x1 mul r1, r10, r0 @@ -357,7 +357,7 @@ _081DD0F4: _081DD118: adds r5, r5, 0x40000000 bcc _081DD0F4 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD07C @@ -383,26 +383,26 @@ _081DD164: ldrne r3, [sp, 0xC] bne _081DD118 _081DD174: - strb r2, [r4, #o_SoundChannel_status] + strb r2, [r4, o_SoundChannel_statusFlags] mov r0, r5, lsr 30 bic r5, r5, 0xC0000000 rsb r0, r0, 0x3 mov r0, r0, lsl 3 mov r6, r6, ror r0 mov r7, r7, ror r0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 b _081DD234 _081DD19C: push {r4,r12} - ldr r1, [r4, #o_SoundChannel_freq] + ldr r1, [r4, o_SoundChannel_frequency] mul r4, r12, r1 ldrsb r0, [r3] ldrsb r1, [r3, 0x1]! sub r1, r1, r0 _081DD1B4: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD1BC: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -427,17 +427,17 @@ _081DD1FC: _081DD208: adds r5, r5, 0x40000000 bcc _081DD1BC - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 subs r8, r8, 0x4 bgt _081DD1B4 sub r3, r3, 0x1 pop {r4,r12} _081DD228: - str r9, [r4, #o_SoundChannel_fw] + str r9, [r4, o_SoundChannel_fw] _081DD22C: - str r2, [r4, #o_SoundChannel_ct] - str r3, [r4, #o_SoundChannel_cp] + str r2, [r4, o_SoundChannel_count] + str r3, [r4, o_SoundChannel_currentPointer] _081DD234: ldr r8, [sp] add r0, pc, 0x1 @@ -467,43 +467,43 @@ _081DD25E: arm_func_start sub_82DF49C sub_82DF49C: - ldr r6, [r4, #o_SoundChannel_wav] - ldrb r0, [r4, #o_SoundChannel_status] - tst r0, 0x20 + ldr r6, [r4, o_SoundChannel_wav] + ldrb r0, [r4, o_SoundChannel_statusFlags] + tst r0, SOUND_CHANNEL_SF_SPECIAL bne _081DD2B4 - orr r0, r0, 0x20 - strb r0, [r4, #o_SoundChannel_status] - ldrb r0, [r4, #o_SoundChannel_type] - tst r0, 0x10 + orr r0, r0, SOUND_CHANNEL_SF_SPECIAL + strb r0, [r4, o_SoundChannel_statusFlags] + ldrb r0, [r4, o_SoundChannel_type] + tst r0, TONEDATA_TYPE_REV beq _081DD29C - ldr r1, [r6, 0xC] + ldr r1, [r6, o_WaveData_size] add r1, r1, r6, lsl 1 add r1, r1, 0x20 sub r3, r1, r3 - str r3, [r4, #o_SoundChannel_cp] + str r3, [r4, o_SoundChannel_currentPointer] _081DD29C: - ldrh r0, [r6] + ldrh r0, [r6, o_WaveData_type] cmp r0, 0 beq _081DD2B4 sub r3, r3, r6 sub r3, r3, 0x10 - str r3, [r4, #o_SoundChannel_cp] + str r3, [r4, o_SoundChannel_currentPointer] _081DD2B4: push {r8,r12,lr} mov r10, r10, lsl 16 mov r11, r11, lsl 16 - ldr r1, [r4, #o_SoundChannel_freq] - ldrb r0, [r4, #o_SoundChannel_type] - tst r0, 0x8 + ldr r1, [r4, o_SoundChannel_frequency] + ldrb r0, [r4, o_SoundChannel_type] + tst r0, TONEDATA_TYPE_FIX movne r8, 0x800000 muleq r8, r12, r1 - ldrh r0, [r6] + ldrh r0, [r6, o_WaveData_type] cmp r0, 0 beq _081DD468 mov r0, 0xFF000000 - str r0, [r4, #o_SoundChannel_xpi] - ldrb r0, [r4, #o_SoundChannel_type] - tst r0, 0x10 + str r0, [r4, o_SoundChannel_xpi] + ldrb r0, [r4, o_SoundChannel_type] + tst r0, TONEDATA_TYPE_REV bne _081DD3C0 bl sub_82DF758 mov r0, r1 @@ -512,7 +512,7 @@ _081DD2B4: sub r1, r1, r0 _081DD308: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD310: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -543,7 +543,7 @@ _081DD364: _081DD370: adds r5, r5, 0x40000000 bcc _081DD310 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 ldr r6, [sp] subs r6, r6, 0x4 @@ -555,8 +555,8 @@ _081DD398: ldr r0, [sp, 0x1C] cmp r0, 0 beq _081DD4F4 - ldr r3, [r4, #o_SoundChannel_wav] - ldr r3, [r3, 0x8] + ldr r3, [r4, o_SoundChannel_wav] + ldr r3, [r3, o_WaveData_loopStart] rsb lr, r2, 0 _081DD3B0: adds r2, r2, r0 @@ -572,7 +572,7 @@ _081DD3C0: sub r1, r1, r0 _081DD3D8: ldr r6, [r5] - ldr r7, [r5, 0x630] + ldr r7, [r5, PCM_DMA_BUF_SIZE] _081DD3E0: mul lr, r9, r1 add lr, r0, lr, asr 23 @@ -603,7 +603,7 @@ _081DD434: _081DD440: adds r5, r5, 0x40000000 bcc _081DD3E0 - str r7, [r5, 0x630] + str r7, [r5, PCM_DMA_BUF_SIZE] str r6, [r5], 0x4 ldr r6, [sp] subs r6, r6, 0x4 @@ -612,8 +612,8 @@ _081DD440: add r3, r3, 0x2 b _081DD4F0 _081DD468: - ldrb r0, [r4, #o_SoundChannel_type] - tst r0, 0x10 + ldrb r0, [r4, o_SoundChannel_type] + tst r0, TONEDATA_TYPE_REV beq _081DD4F0 ldrsb r0, [r3, -0x1]! ldrsb r1, [r3, -0x1] @@ -653,7 +653,7 @@ _081DD4F0: pop {r8,r12,pc} _081DD4F4: mov r2, 0 - strb r2, [r4, #o_SoundChannel_status] + strb r2, [r4, o_SoundChannel_statusFlags] mov r0, r5, lsr 30 bic r5, r5, 0xC0000000 rsb r0, r0, 0x3 @@ -669,13 +669,13 @@ _081DD4F4: sub_82DF758: push {r0,r2,r5-r7,lr} mov r0, r3, lsr 6 - ldr r1, [r4, #o_SoundChannel_xpi] + ldr r1, [r4, o_SoundChannel_xpi] cmp r0, r1 beq _081DD594 - str r0, [r4, #o_SoundChannel_xpi] + str r0, [r4, o_SoundChannel_xpi] mov r1, 0x21 mul r2, r1, r0 - ldr r1, [r4, #o_SoundChannel_wav] + ldr r1, [r4, o_SoundChannel_wav] add r2, r2, r1 add r2, r2, 0x10 ldr r5, =gUnknown_03001300 @@ -723,24 +723,24 @@ SoundMainBTM: thumb_func_start RealClearChain RealClearChain: - ldr r3, [r0, 0x2C] + ldr r3, [r0, o_SoundChannel_track] cmp r3, 0 beq _081DD5E2 - ldr r1, [r0, 0x34] - ldr r2, [r0, 0x30] + ldr r1, [r0, o_SoundChannel_nextChannelPointer] + ldr r2, [r0, o_SoundChannel_prevChannelPointer] cmp r2, 0 beq _081DD5D6 - str r1, [r2, 0x34] + str r1, [r2, o_SoundChannel_nextChannelPointer] b _081DD5D8 _081DD5D6: - str r1, [r3, 0x20] + str r1, [r3, o_MusicPlayerTrack_chan] _081DD5D8: cmp r1, 0 beq _081DD5DE - str r2, [r1, 0x30] + str r2, [r1, o_SoundChannel_prevChannelPointer] _081DD5DE: movs r1, 0 - str r1, [r0, 0x2C] + str r1, [r0, o_SoundChannel_track] _081DD5E2: bx lr thumb_func_end RealClearChain @@ -749,26 +749,26 @@ _081DD5E2: ply_fine: push {r4,r5,lr} adds r5, r1, 0 - ldr r4, [r5, #o_MusicPlayerTrack_chan] + ldr r4, [r5, o_MusicPlayerTrack_chan] cmp r4, 0 beq ply_fine_done ply_fine_loop: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq ply_fine_ok - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r1, r0 - strb r1, [r4] + strb r1, [r4, o_SoundChannel_statusFlags] ply_fine_ok: adds r0, r4, 0 bl RealClearChain - ldr r4, [r4, 0x34] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne ply_fine_loop ply_fine_done: movs r0, 0 - strb r0, [r5] + strb r0, [r5, o_MusicPlayerTrack_flags] pop {r4,r5} pop {r0} bx r0 @@ -818,10 +818,10 @@ lt_MPlayJumpTableTemplate: .word gMPlayJumpTableTemplate thumb_func_start ld_r3_tp_adr_i ld_r3_tp_adr_i: - ldr r2, [r1, 0x40] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] _081DD64A: adds r3, r2, 0x1 - str r3, [r1, 0x40] + str r3, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] b chk_adr_r2 thumb_func_end ld_r3_tp_adr_i @@ -830,7 +830,7 @@ _081DD64A: ply_goto: push {lr} ply_goto_1: - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r0, [r2, 0x3] lsls r0, 8 ldrb r3, [r2, 0x2] @@ -841,24 +841,24 @@ ply_goto_1: lsls r0, 8 bl ldrb_r3_r2 orrs r0, r3 - str r0, [r1, #o_MusicPlayerTrack_cmdPtr] + str r0, [r1, o_MusicPlayerTrack_cmdPtr] pop {r0} bx r0 thumb_func_end ply_goto thumb_func_start ply_patt ply_patt: - ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel] + ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] cmp r2, 3 bhs ply_patt_done lsls r2, 2 adds r3, r1, r2 - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] adds r2, 0x4 - str r2, [r3, #o_MusicPlayerTrack_patternStack] - ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel] + str r2, [r3, o_MusicPlayerTrack_patternStack] + ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] adds r2, 1 - strb r2, [r1, #o_MusicPlayerTrack_patternLevel] + strb r2, [r1, o_MusicPlayerTrack_patternLevel] b ply_goto ply_patt_done: b ply_fine @@ -866,15 +866,15 @@ ply_patt_done: thumb_func_start ply_pend ply_pend: - ldrb r2, [r1, #o_MusicPlayerTrack_patternLevel] + ldrb r2, [r1, o_MusicPlayerTrack_patternLevel] cmp r2, 0 beq ply_pend_done subs r2, 1 - strb r2, [r1, #o_MusicPlayerTrack_patternLevel] + strb r2, [r1, o_MusicPlayerTrack_patternLevel] lsls r2, 2 adds r3, r1, r2 - ldr r2, [r3, #o_MusicPlayerTrack_patternStack] - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r3, o_MusicPlayerTrack_patternStack] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] ply_pend_done: bx lr thumb_func_end ply_pend @@ -882,17 +882,17 @@ ply_pend_done: thumb_func_start ply_rept ply_rept: push {lr} - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] cmp r3, 0 bne ply_rept_1 adds r2, 1 - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] b ply_goto_1 ply_rept_1: - ldrb r3, [r1, #o_MusicPlayerTrack_repN] + ldrb r3, [r1, o_MusicPlayerTrack_repN] adds r3, 1 - strb r3, [r1, #o_MusicPlayerTrack_repN] + strb r3, [r1, o_MusicPlayerTrack_repN] mov r12, r3 bl ld_r3_tp_adr_i cmp r12, r3 @@ -900,9 +900,9 @@ ply_rept_1: b ply_goto_1 ply_rept_2: movs r3, 0 - strb r3, [r1, #o_MusicPlayerTrack_repN] + strb r3, [r1, o_MusicPlayerTrack_repN] adds r2, 5 - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] pop {r0} bx r0 thumb_func_end ply_rept @@ -911,7 +911,7 @@ ply_rept_2: ply_prio: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_priority] + strb r3, [r1, o_MusicPlayerTrack_priority] bx r12 thumb_func_end ply_prio @@ -920,11 +920,11 @@ ply_tempo: mov r12, lr bl ld_r3_tp_adr_i lsls r3, 1 - strh r3, [r0, #o_MusicPlayerInfo_tempoD] - ldrh r2, [r0, #o_MusicPlayerInfo_tempoU] + strh r3, [r0, o_MusicPlayerInfo_tempoD] + ldrh r2, [r0, o_MusicPlayerInfo_tempoU] muls r3, r2 lsrs r3, 8 - strh r3, [r0, #o_MusicPlayerInfo_tempoI] + strh r3, [r0, o_MusicPlayerInfo_tempoI] bx r12 thumb_func_end ply_tempo @@ -932,35 +932,35 @@ ply_tempo: ply_keysh: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_keyShift] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_keyShift] + ldrb r3, [r1, o_MusicPlayerTrack_flags] movs r2, 0xC orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_keysh thumb_func_start ply_voice ply_voice: mov r12, lr - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] adds r2, 1 - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] lsls r2, r3, 1 adds r2, r3 lsls r2, 2 - ldr r3, [r0, #o_MusicPlayerInfo_tone] + ldr r3, [r0, o_MusicPlayerInfo_tone] adds r2, r3 - ldr r3, [r2] + ldr r3, [r2, o_ToneData_type] bl chk_adr_r2 - str r3, [r1, #o_MusicPlayerTrack_ToneData_type] - ldr r3, [r2, 0x4] + str r3, [r1, o_MusicPlayerTrack_ToneData_type] + ldr r3, [r2, o_ToneData_wav] bl chk_adr_r2 - str r3, [r1, #o_MusicPlayerTrack_ToneData_wav] - ldr r3, [r2, 0x8] + str r3, [r1, o_MusicPlayerTrack_ToneData_wav] + ldr r3, [r2, o_ToneData_attack] bl chk_adr_r2 - str r3, [r1, #o_MusicPlayerTrack_ToneData_attack] + str r3, [r1, o_MusicPlayerTrack_ToneData_attack] bx r12 thumb_func_end ply_voice @@ -968,11 +968,11 @@ ply_voice: ply_vol: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_vol] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] - movs r2, 0x3 + strb r3, [r1, o_MusicPlayerTrack_vol] + ldrb r3, [r1, o_MusicPlayerTrack_flags] + movs r2, MPT_FLG_VOLCHG orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_vol @@ -980,12 +980,12 @@ ply_vol: ply_pan: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 - strb r3, [r1, #o_MusicPlayerTrack_pan] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] - movs r2, 0x3 + subs r3, C_V + strb r3, [r1, o_MusicPlayerTrack_pan] + ldrb r3, [r1, o_MusicPlayerTrack_flags] + movs r2, MPT_FLG_VOLCHG orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_pan @@ -993,12 +993,12 @@ ply_pan: ply_bend: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 - strb r3, [r1, #o_MusicPlayerTrack_bend] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] - movs r2, 0xC + subs r3, C_V + strb r3, [r1, o_MusicPlayerTrack_bend] + ldrb r3, [r1, o_MusicPlayerTrack_flags] + movs r2, MPT_FLG_PITCHG orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_bend @@ -1006,11 +1006,11 @@ ply_bend: ply_bendr: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_bendRange] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] - movs r2, 0xC + strb r3, [r1, o_MusicPlayerTrack_bendRange] + ldrb r3, [r1, o_MusicPlayerTrack_flags] + movs r2, MPT_FLG_PITCHG orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_bendr @@ -1018,7 +1018,7 @@ ply_bendr: ply_lfodl: mov r12, lr bl ld_r3_tp_adr_i - strb r3, [r1, #o_MusicPlayerTrack_lfoDelay] + strb r3, [r1, o_MusicPlayerTrack_lfoDelay] bx r12 thumb_func_end ply_lfodl @@ -1026,14 +1026,14 @@ ply_lfodl: ply_modt: mov r12, lr bl ld_r3_tp_adr_i - ldrb r0, [r1, #o_MusicPlayerTrack_modT] + ldrb r0, [r1, o_MusicPlayerTrack_modT] cmp r0, r3 beq _081DD7AA - strb r3, [r1, #o_MusicPlayerTrack_modT] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] - movs r2, 0xF + strb r3, [r1, o_MusicPlayerTrack_modT] + ldrb r3, [r1, o_MusicPlayerTrack_flags] + movs r2, MPT_FLG_VOLCHG | MPT_FLG_PITCHG orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] _081DD7AA: bx r12 thumb_func_end ply_modt @@ -1042,19 +1042,19 @@ _081DD7AA: ply_tune: mov r12, lr bl ld_r3_tp_adr_i - subs r3, 0x40 - strb r3, [r1, #o_MusicPlayerTrack_tune] - ldrb r3, [r1, #o_MusicPlayerTrack_flags] - movs r2, 0xC + subs r3, C_V + strb r3, [r1, o_MusicPlayerTrack_tune] + ldrb r3, [r1, o_MusicPlayerTrack_flags] + movs r2, MPT_FLG_PITCHG orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx r12 thumb_func_end ply_tune thumb_func_start ply_port ply_port: mov r12, lr - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] adds r2, 1 ldr r0, =REG_SOUND1CNT_L @ sound register base address @@ -1072,20 +1072,20 @@ m4aSoundVSync: @ Exit the function if ident is not ID_NUMBER or ID_NUMBER+1. ldr r2, lt2_ID_NUMBER - ldr r3, [r0, #o_SoundInfo_ident] + ldr r3, [r0, o_SoundInfo_ident] subs r3, r2 cmp r3, 1 bhi m4aSoundVSync_Done @ Decrement the PCM DMA counter. If it reaches 0, we need to do a DMA. - ldrb r1, [r0, #o_SoundInfo_pcmDmaCounter] + ldrb r1, [r0, o_SoundInfo_pcmDmaCounter] subs r1, 1 - strb r1, [r0, #o_SoundInfo_pcmDmaCounter] + strb r1, [r0, o_SoundInfo_pcmDmaCounter] bgt m4aSoundVSync_Done @ Reload the PCM DMA counter. - ldrb r1, [r0, #o_SoundInfo_pcmDmaPeriod] - strb r1, [r0, #o_SoundInfo_pcmDmaCounter] + ldrb r1, [r0, o_SoundInfo_pcmDmaPeriod] + strb r1, [r0, o_SoundInfo_pcmDmaCounter] ldr r2, =REG_DMA1 @@ -1127,18 +1127,18 @@ m4aSoundVSync_Done: thumb_func_start MPlayMain MPlayMain: ldr r2, lt2_ID_NUMBER - ldr r3, [r0, #o_MusicPlayerInfo_ident] + ldr r3, [r0, o_MusicPlayerInfo_ident] cmp r2, r3 beq _081DD82E bx lr _081DD82E: adds r3, 0x1 - str r3, [r0, #o_MusicPlayerInfo_ident] + str r3, [r0, o_MusicPlayerInfo_ident] push {r0,lr} - ldr r3, [r0, #o_MusicPlayerInfo_func] + ldr r3, [r0, o_MusicPlayerInfo_func] cmp r3, 0 beq _081DD840 - ldr r0, [r0, #o_MusicPlayerInfo_intp] + ldr r0, [r0, o_MusicPlayerInfo_intp] bl call_r3 _081DD840: pop {r0} @@ -1149,7 +1149,7 @@ _081DD840: mov r7, r11 push {r4-r7} adds r7, r0, 0 - ldr r0, [r7, #o_MusicPlayerInfo_status] + ldr r0, [r7, o_MusicPlayerInfo_status] cmp r0, 0 bge _081DD858 b _081DDA6C @@ -1159,23 +1159,23 @@ _081DD858: mov r8, r0 adds r0, r7, 0 bl FadeOutBody - ldr r0, [r7, #o_MusicPlayerInfo_status] + ldr r0, [r7, o_MusicPlayerInfo_status] cmp r0, 0 bge _081DD86C b _081DDA6C _081DD86C: - ldrh r0, [r7, #o_MusicPlayerInfo_tempoC] - ldrh r1, [r7, #o_MusicPlayerInfo_tempoI] + ldrh r0, [r7, o_MusicPlayerInfo_tempoC] + ldrh r1, [r7, o_MusicPlayerInfo_tempoI] adds r0, r1 b _081DD9BC _081DD874: - ldrb r6, [r7, #o_MusicPlayerInfo_trackCount] - ldr r5, [r7, #o_MusicPlayerInfo_tracks] + ldrb r6, [r7, o_MusicPlayerInfo_trackCount] + ldr r5, [r7, o_MusicPlayerInfo_tracks] movs r3, 0x1 movs r4, 0 _081DD87C: - ldrb r0, [r5] - movs r1, 0x80 + ldrb r0, [r5, o_MusicPlayerTrack_flags] + movs r1, MPT_FLG_EXIST tst r1, r0 bne _081DD886 b _081DD998 @@ -1183,68 +1183,68 @@ _081DD886: mov r10, r3 orrs r4, r3 mov r11, r4 - ldr r4, [r5, #o_MusicPlayerTrack_chan] + ldr r4, [r5, o_MusicPlayerTrack_chan] cmp r4, 0 beq _081DD8BA _081DD892: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DD8AE - ldrb r0, [r4, 0x10] + ldrb r0, [r4, o_SoundChannel_gateTime] cmp r0, 0 beq _081DD8B4 subs r0, 0x1 - strb r0, [r4, 0x10] + strb r0, [r4, o_SoundChannel_gateTime] bne _081DD8B4 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r1, r0 - strb r1, [r4] + strb r1, [r4, o_SoundChannel_statusFlags] b _081DD8B4 _081DD8AE: adds r0, r4, 0 bl ClearChain _081DD8B4: - ldr r4, [r4, 0x34] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne _081DD892 _081DD8BA: - ldrb r3, [r5, #o_MusicPlayerTrack_flags] - movs r0, 0x40 + ldrb r3, [r5, o_MusicPlayerTrack_flags] + movs r0, MPT_FLG_START tst r0, r3 beq _081DD938 adds r0, r5, 0 bl Clear64byte - movs r0, 0x80 - strb r0, [r5] + movs r0, MPT_FLG_EXIST + strb r0, [r5, o_MusicPlayerTrack_flags] movs r0, 0x2 - strb r0, [r5, #o_MusicPlayerTrack_bendRange] + strb r0, [r5, o_MusicPlayerTrack_bendRange] movs r0, 0x40 - strb r0, [r5, #o_MusicPlayerTrack_volX] + strb r0, [r5, o_MusicPlayerTrack_volX] movs r0, 0x16 - strb r0, [r5, #o_MusicPlayerTrack_lfoSpeed] + strb r0, [r5, o_MusicPlayerTrack_lfoSpeed] movs r0, 0x1 adds r1, r5, 0x6 - strb r0, [r1, #o_MusicPlayerTrack_ToneData_type - 0x6] + strb r0, [r1, o_MusicPlayerTrack_ToneData_type - 0x6] b _081DD938 _081DD8E0: - ldr r2, [r5, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r5, o_MusicPlayerTrack_cmdPtr] ldrb r1, [r2] cmp r1, 0x80 bhs _081DD8EC - ldrb r1, [r5, #o_MusicPlayerTrack_runningStatus] + ldrb r1, [r5, o_MusicPlayerTrack_runningStatus] b _081DD8F6 _081DD8EC: adds r2, 0x1 - str r2, [r5, #o_MusicPlayerTrack_cmdPtr] + str r2, [r5, o_MusicPlayerTrack_cmdPtr] cmp r1, 0xBD bcc _081DD8F6 - strb r1, [r5, #o_MusicPlayerTrack_runningStatus] + strb r1, [r5, o_MusicPlayerTrack_runningStatus] _081DD8F6: cmp r1, 0xCF bcc _081DD90C mov r0, r8 - ldr r3, [r0, #o_SoundInfo_plynote] + ldr r3, [r0, o_SoundInfo_plynote] adds r0, r1, 0 subs r0, 0xCF adds r1, r7, 0 @@ -1256,15 +1256,15 @@ _081DD90C: bls _081DD92E adds r0, r1, 0 subs r0, 0xB1 - strb r0, [r7, #o_MusicPlayerInfo_cmd] + strb r0, [r7, o_MusicPlayerInfo_cmd] mov r3, r8 - ldr r3, [r3, #o_SoundInfo_MPlayJumpTable] + ldr r3, [r3, o_SoundInfo_MPlayJumpTable] lsls r0, 2 ldr r3, [r3, r0] adds r0, r7, 0 adds r1, r5, 0 bl call_r3 - ldrb r0, [r5, #o_MusicPlayerTrack_flags] + ldrb r0, [r5, o_MusicPlayerTrack_flags] cmp r0, 0 beq _081DD994 b _081DD938 @@ -1273,29 +1273,29 @@ _081DD92E: subs r1, 0x80 adds r1, r0 ldrb r0, [r1] - strb r0, [r5, #o_MusicPlayerTrack_wait] + strb r0, [r5, o_MusicPlayerTrack_wait] _081DD938: - ldrb r0, [r5, #o_MusicPlayerTrack_wait] + ldrb r0, [r5, o_MusicPlayerTrack_wait] cmp r0, 0 beq _081DD8E0 subs r0, 0x1 - strb r0, [r5, #o_MusicPlayerTrack_wait] - ldrb r1, [r5, #o_MusicPlayerTrack_lfoSpeed] + strb r0, [r5, o_MusicPlayerTrack_wait] + ldrb r1, [r5, o_MusicPlayerTrack_lfoSpeed] cmp r1, 0 beq _081DD994 - ldrb r0, [r5, #o_MusicPlayerTrack_mod] + ldrb r0, [r5, o_MusicPlayerTrack_mod] cmp r0, 0 beq _081DD994 - ldrb r0, [r5, #o_MusicPlayerTrack_lfoDelayC] + ldrb r0, [r5, o_MusicPlayerTrack_lfoDelayC] cmp r0, 0 beq _081DD95A subs r0, 0x1 - strb r0, [r5, #o_MusicPlayerTrack_lfoDelayC] + strb r0, [r5, o_MusicPlayerTrack_lfoDelayC] b _081DD994 _081DD95A: - ldrb r0, [r5, #o_MusicPlayerTrack_lfoSpeedC] + ldrb r0, [r5, o_MusicPlayerTrack_lfoSpeedC] adds r0, r1 - strb r0, [r5, #o_MusicPlayerTrack_lfoSpeedC] + strb r0, [r5, o_MusicPlayerTrack_lfoSpeedC] adds r1, r0, 0 subs r0, 0x40 lsls r0, 24 @@ -1307,102 +1307,102 @@ _081DD96E: movs r0, 0x80 subs r2, r0, r1 _081DD972: - ldrb r0, [r5, #o_MusicPlayerTrack_mod] + ldrb r0, [r5, o_MusicPlayerTrack_mod] muls r0, r2 asrs r2, r0, 6 - ldrb r0, [r5, #o_MusicPlayerTrack_modM] + ldrb r0, [r5, o_MusicPlayerTrack_modM] eors r0, r2 lsls r0, 24 beq _081DD994 - strb r2, [r5, #o_MusicPlayerTrack_modM] + strb r2, [r5, o_MusicPlayerTrack_modM] ldrb r0, [r5] - ldrb r1, [r5, #o_MusicPlayerTrack_modT] + ldrb r1, [r5, o_MusicPlayerTrack_modT] cmp r1, 0 bne _081DD98E - movs r1, 0xC + movs r1, MPT_FLG_PITCHG b _081DD990 _081DD98E: - movs r1, 0x3 + movs r1, MPT_FLG_VOLCHG _081DD990: orrs r0, r1 - strb r0, [r5, #o_MusicPlayerTrack_flags] + strb r0, [r5, o_MusicPlayerTrack_flags] _081DD994: mov r3, r10 mov r4, r11 _081DD998: subs r6, 0x1 ble _081DD9A4 - movs r0, 0x50 + movs r0, MusicPlayerTrack_size adds r5, r0 lsls r3, 1 b _081DD87C _081DD9A4: - ldr r0, [r7, #o_MusicPlayerInfo_clock] + ldr r0, [r7, o_MusicPlayerInfo_clock] adds r0, 0x1 - str r0, [r7, #o_MusicPlayerInfo_clock] + str r0, [r7, o_MusicPlayerInfo_clock] cmp r4, 0 bne _081DD9B6 movs r0, 0x80 lsls r0, 24 - str r0, [r7, #o_MusicPlayerInfo_status] + str r0, [r7, o_MusicPlayerInfo_status] b _081DDA6C _081DD9B6: - str r4, [r7, #o_MusicPlayerInfo_status] - ldrh r0, [r7, #o_MusicPlayerInfo_tempoC] - subs r0, 0x96 + str r4, [r7, o_MusicPlayerInfo_status] + ldrh r0, [r7, o_MusicPlayerInfo_tempoC] + subs r0, 150 _081DD9BC: - strh r0, [r7, #o_MusicPlayerInfo_tempoC] - cmp r0, 0x96 + strh r0, [r7, o_MusicPlayerInfo_tempoC] + cmp r0, 150 bcc _081DD9C4 b _081DD874 _081DD9C4: - ldrb r2, [r7, #o_MusicPlayerInfo_trackCount] - ldr r5, [r7, #o_MusicPlayerInfo_tracks] + ldrb r2, [r7, o_MusicPlayerInfo_trackCount] + ldr r5, [r7, o_MusicPlayerInfo_tracks] _081DD9C8: - ldrb r0, [r5, #o_MusicPlayerTrack_flags] + ldrb r0, [r5, o_MusicPlayerTrack_flags] movs r1, 0x80 tst r1, r0 beq _081DDA62 - movs r1, 0xF + movs r1, MPT_FLG_VOLCHG | MPT_FLG_PITCHG tst r1, r0 beq _081DDA62 mov r9, r2 adds r0, r7, 0 adds r1, r5, 0 bl TrkVolPitSet - ldr r4, [r5, #o_MusicPlayerTrack_chan] + ldr r4, [r5, o_MusicPlayerTrack_chan] cmp r4, 0 beq _081DDA58 _081DD9E6: - ldrb r1, [r4, #o_SoundChannel_status] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 bne _081DD9F6 adds r0, r4, 0 bl ClearChain b _081DDA52 _081DD9F6: - ldrb r0, [r4, #o_SoundChannel_type] - movs r6, 0x7 + ldrb r0, [r4, o_SoundChannel_type] + movs r6, TONEDATA_TYPE_CGB ands r6, r0 - ldrb r3, [r5, #o_MusicPlayerTrack_flags] - movs r0, 0x3 + ldrb r3, [r5, o_MusicPlayerTrack_flags] + movs r0, MPT_FLG_VOLCHG tst r0, r3 beq _081DDA14 bl ChnVolSetAsm cmp r6, 0 beq _081DDA14 - ldrb r0, [r4, #o_CgbChannel_mo] + ldrb r0, [r4, o_CgbChannel_modify] movs r1, 0x1 orrs r0, r1 - strb r0, [r4, #o_CgbChannel_mo] + strb r0, [r4, o_CgbChannel_modify] _081DDA14: - ldrb r3, [r5, #o_MusicPlayerTrack_flags] - movs r0, 0xC + ldrb r3, [r5, o_MusicPlayerTrack_flags] + movs r0, MPT_FLG_PITCHG tst r0, r3 beq _081DDA52 - ldrb r1, [r4, #o_SoundChannel_ky] - movs r0, 0x8 + ldrb r1, [r4, o_SoundChannel_key] + movs r0, o_MusicPlayerTrack_keyM ldrsb r0, [r5, r0] adds r2, r1, r0 bpl _081DDA28 @@ -1411,42 +1411,42 @@ _081DDA28: cmp r6, 0 beq _081DDA46 mov r0, r8 - ldr r3, [r0, #o_SoundInfo_MidiKeyToCgbFreq] + ldr r3, [r0, o_SoundInfo_MidiKeyToCgbFreq] adds r1, r2, 0 - ldrb r2, [r5, #o_MusicPlayerTrack_pitM] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r0, r6, 0 bl call_r3 - str r0, [r4, #o_CgbChannel_fr] - ldrb r0, [r4, #o_CgbChannel_mo] - movs r1, 0x2 + str r0, [r4, o_CgbChannel_frequency] + ldrb r0, [r4, o_CgbChannel_modify] + movs r1, CGB_CHANNEL_MO_PIT orrs r0, r1 - strb r0, [r4, #o_CgbChannel_mo] + strb r0, [r4, o_CgbChannel_modify] b _081DDA52 _081DDA46: adds r1, r2, 0 - ldrb r2, [r5, #o_MusicPlayerTrack_pitM] - ldr r0, [r4, #o_SoundChannel_wav] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] + ldr r0, [r4, o_SoundChannel_wav] bl MidiKeyToFreq - str r0, [r4, #o_SoundChannel_freq] + str r0, [r4, o_SoundChannel_frequency] _081DDA52: - ldr r4, [r4, #o_SoundChannel_np] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne _081DD9E6 _081DDA58: - ldrb r0, [r5, #o_MusicPlayerTrack_flags] + ldrb r0, [r5, o_MusicPlayerTrack_flags] movs r1, 0xF0 ands r0, r1 - strb r0, [r5, #o_MusicPlayerTrack_flags] + strb r0, [r5, o_MusicPlayerTrack_flags] mov r2, r9 _081DDA62: subs r2, 0x1 ble _081DDA6C - movs r0, 0x50 + movs r0, MusicPlayerTrack_size adds r5, r0 bgt _081DD9C8 _081DDA6C: ldr r0, lt2_ID_NUMBER - str r0, [r7, #o_MusicPlayerInfo_ident] + str r0, [r7, o_MusicPlayerInfo_ident] pop {r0-r7} mov r8, r0 mov r9, r1 @@ -1467,35 +1467,35 @@ lt2_ID_NUMBER: .word ID_NUMBER TrackStop: push {r4-r6,lr} adds r5, r1, 0 - ldrb r1, [r5, #o_MusicPlayerTrack_flags] - movs r0, 0x80 + ldrb r1, [r5, o_MusicPlayerTrack_flags] + movs r0, MPT_FLG_EXIST tst r0, r1 beq TrackStop_Done - ldr r4, [r5, #o_MusicPlayerTrack_chan] + ldr r4, [r5, o_MusicPlayerTrack_chan] cmp r4, 0 beq TrackStop_3 movs r6, 0 TrackStop_Loop: - ldrb r0, [r4, #o_SoundChannel_status] + ldrb r0, [r4, o_SoundChannel_statusFlags] cmp r0, 0 beq TrackStop_2 - ldrb r0, [r4, #o_SoundChannel_type] - movs r3, 0x7 + ldrb r0, [r4, o_SoundChannel_type] + movs r3, TONEDATA_TYPE_CGB ands r0, r3 beq TrackStop_1 ldr r3, =SOUND_INFO_PTR ldr r3, [r3] - ldr r3, [r3, #o_SoundInfo_CgbOscOff] + ldr r3, [r3, o_SoundInfo_CgbOscOff] bl call_r3 TrackStop_1: - strb r6, [r4, #o_SoundChannel_status] + strb r6, [r4, o_SoundChannel_statusFlags] TrackStop_2: - str r6, [r4, #o_SoundChannel_track] - ldr r4, [r4, #o_SoundChannel_np] + str r6, [r4, o_SoundChannel_track] + ldr r4, [r4, o_SoundChannel_nextChannelPointer] cmp r4, 0 bne TrackStop_Loop TrackStop_3: - str r4, [r5, #o_MusicPlayerTrack_chan] + str r4, [r5, o_MusicPlayerTrack_chan] TrackStop_Done: pop {r4-r6} pop {r0} @@ -1505,31 +1505,31 @@ TrackStop_Done: thumb_func_start ChnVolSetAsm ChnVolSetAsm: - ldrb r1, [r4, 0x12] - movs r0, 0x14 + ldrb r1, [r4, o_SoundChannel_velocity] + movs r0, o_SoundChannel_rhythmPan ldrsb r2, [r4, r0] movs r3, 0x80 adds r3, r2 muls r3, r1 - ldrb r0, [r5, 0x10] + ldrb r0, [r5, o_MusicPlayerTrack_volMR] muls r0, r3 asrs r0, 14 cmp r0, 0xFF bls _081DDAE8 movs r0, 0xFF _081DDAE8: - strb r0, [r4, 0x2] + strb r0, [r4, o_SoundChannel_rightVolume] movs r3, 0x7F subs r3, r2 muls r3, r1 - ldrb r0, [r5, 0x11] + ldrb r0, [r5, o_MusicPlayerTrack_volML] muls r0, r3 asrs r0, 14 cmp r0, 0xFF bls _081DDAFC movs r0, 0xFF _081DDAFC: - strb r0, [r4, 0x3] + strb r0, [r4, o_SoundChannel_leftVolume] bx lr thumb_func_end ChnVolSetAsm @@ -1550,41 +1550,41 @@ ply_note: ldr r1, =gClockTable adds r0, r1 ldrb r0, [r0] - strb r0, [r5, #o_MusicPlayerTrack_gateTime] - ldr r3, [r5, #o_MusicPlayerTrack_cmdPtr] + strb r0, [r5, o_MusicPlayerTrack_gateTime] + ldr r3, [r5, o_MusicPlayerTrack_cmdPtr] ldrb r0, [r3] cmp r0, 0x80 bhs _081DDB46 - strb r0, [r5, #o_MusicPlayerTrack_key] + strb r0, [r5, o_MusicPlayerTrack_key] adds r3, 0x1 ldrb r0, [r3] cmp r0, 0x80 bhs _081DDB44 - strb r0, [r5, #o_MusicPlayerTrack_velocity] + strb r0, [r5, o_MusicPlayerTrack_velocity] adds r3, 0x1 ldrb r0, [r3] cmp r0, 0x80 bhs _081DDB44 - ldrb r1, [r5, #o_MusicPlayerTrack_gateTime] + ldrb r1, [r5, o_MusicPlayerTrack_gateTime] adds r1, r0 - strb r1, [r5, #o_MusicPlayerTrack_gateTime] + strb r1, [r5, o_MusicPlayerTrack_gateTime] adds r3, 0x1 _081DDB44: - str r3, [r5, #o_MusicPlayerTrack_cmdPtr] + str r3, [r5, o_MusicPlayerTrack_cmdPtr] _081DDB46: movs r0, 0 str r0, [sp, 0x14] adds r4, r5, 0 - adds r4, #o_MusicPlayerTrack_ToneData_type + adds r4, o_MusicPlayerTrack_ToneData_type ldrb r2, [r4] movs r0, TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL tst r0, r2 beq _081DDB98 - ldrb r3, [r5, #o_MusicPlayerTrack_key] + ldrb r3, [r5, o_MusicPlayerTrack_key] movs r0, TONEDATA_TYPE_SPL tst r0, r2 beq _081DDB66 - ldr r1, [r5, #o_MusicPlayerTrack_ToneData_keySplitTable] + ldr r1, [r5, o_MusicPlayerTrack_ToneData_keySplitTable] adds r1, r3 ldrb r0, [r1] b _081DDB68 @@ -1594,37 +1594,37 @@ _081DDB68: lsls r1, r0, 1 adds r1, r0 lsls r1, 2 - ldr r0, [r5, #o_MusicPlayerTrack_ToneData_wav] + ldr r0, [r5, o_MusicPlayerTrack_ToneData_wav] adds r1, r0 mov r9, r1 mov r6, r9 ldrb r1, [r6] - movs r0, 0xC0 + movs r0, TONEDATA_TYPE_SPL | TONEDATA_TYPE_RHY tst r0, r1 beq _081DDB80 b _081DDCEA _081DDB80: - movs r0, 0x80 + movs r0, TONEDATA_TYPE_RHY tst r0, r2 beq _081DDB9C - ldrb r1, [r6, 0x3] + ldrb r1, [r6, o_ToneData_pan_sweep] movs r0, 0x80 tst r0, r1 beq _081DDB94 - subs r1, 0xC0 + subs r1, TONEDATA_P_S_PAN lsls r1, 1 str r1, [sp, 0x14] _081DDB94: - ldrb r3, [r6, 0x1] + ldrb r3, [r6, o_SoundChannel_type] b _081DDB9C _081DDB98: mov r9, r4 - ldrb r3, [r5, 0x5] + ldrb r3, [r5, o_MusicPlayerTrack_key] _081DDB9C: str r3, [sp, 0x8] ldr r6, [sp] - ldrb r1, [r6, 0x9] - ldrb r0, [r5, 0x1D] + ldrb r1, [r6, o_MusicPlayerInfo_priority] + ldrb r0, [r5, o_MusicPlayerTrack_priority] adds r0, r1 cmp r0, 0xFF bls _081DDBAC @@ -1632,13 +1632,13 @@ _081DDB9C: _081DDBAC: str r0, [sp, 0x10] mov r6, r9 - ldrb r0, [r6] - movs r6, 0x7 + ldrb r0, [r6, o_ToneData_type] + movs r6, TONEDATA_TYPE_CGB ands r6, r0 str r6, [sp, 0xC] beq _081DDBEC ldr r0, [sp, 0x4] - ldr r4, [r0, 0x1C] + ldr r4, [r0, o_SoundInfo_cgbChans] cmp r4, 0 bne _081DDBC4 b _081DDCEA @@ -1646,21 +1646,21 @@ _081DDBC4: subs r6, 0x1 lsls r0, r6, 6 adds r4, r0 - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_CgbChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DDC40 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r1 bne _081DDC40 - ldrb r1, [r4, 0x13] + ldrb r1, [r4, o_CgbChannel_priority] ldr r0, [sp, 0x10] cmp r1, r0 bcc _081DDC40 beq _081DDBE4 b _081DDCEA _081DDBE4: - ldr r0, [r4, 0x2C] + ldr r0, [r4, o_CgbChannel_track] cmp r0, r5 bcs _081DDC40 b _081DDCEA @@ -1670,35 +1670,35 @@ _081DDBEC: movs r2, 0 mov r8, r2 ldr r4, [sp, 0x4] - ldrb r3, [r4, 0x6] - adds r4, 0x50 + ldrb r3, [r4, o_SoundInfo_maxChans] + adds r4, o_SoundInfo_chans _081DDBFA: - ldrb r1, [r4] - movs r0, 0xC7 + ldrb r1, [r4, o_SoundChannel_statusFlags] + movs r0, SOUND_CHANNEL_SF_ON tst r0, r1 beq _081DDC40 - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP tst r0, r1 beq _081DDC14 cmp r2, 0 bne _081DDC18 adds r2, 0x1 - ldrb r6, [r4, 0x13] - ldr r7, [r4, 0x2C] + ldrb r6, [r4, o_SoundChannel_priority] + ldr r7, [r4, o_SoundChannel_track] b _081DDC32 _081DDC14: cmp r2, 0 bne _081DDC34 _081DDC18: - ldrb r0, [r4, 0x13] + ldrb r0, [r4, o_SoundChannel_priority] cmp r0, r6 bcs _081DDC24 adds r6, r0, 0 - ldr r7, [r4, 0x2C] + ldr r7, [r4, o_SoundChannel_track] b _081DDC32 _081DDC24: bhi _081DDC34 - ldr r0, [r4, 0x2C] + ldr r0, [r4, o_SoundChannel_track] cmp r0, r7 bls _081DDC30 adds r7, r0, 0 @@ -1708,7 +1708,7 @@ _081DDC30: _081DDC32: mov r8, r4 _081DDC34: - adds r4, 0x40 + adds r4, SoundChannel_size subs r3, 0x1 bgt _081DDBFA mov r4, r8 @@ -1718,17 +1718,17 @@ _081DDC40: adds r0, r4, 0 bl ClearChain movs r1, 0 - str r1, [r4, 0x30] - ldr r3, [r5, 0x20] - str r3, [r4, 0x34] + str r1, [r4, o_SoundChannel_prevChannelPointer] + ldr r3, [r5, o_MusicPlayerTrack_chan] + str r3, [r4, o_SoundChannel_nextChannelPointer] cmp r3, 0 beq _081DDC54 - str r4, [r3, 0x30] + str r4, [r3, o_SoundChannel_prevChannelPointer] _081DDC54: - str r4, [r5, 0x20] - str r5, [r4, 0x2C] - ldrb r0, [r5, 0x1B] - strb r0, [r5, 0x1C] + str r4, [r5, o_MusicPlayerTrack_chan] + str r5, [r4, o_SoundChannel_track] + ldrb r0, [r5, o_MusicPlayerTrack_lfoDelay] + strb r0, [r5, o_MusicPlayerTrack_lfoDelayC] cmp r0, r1 beq _081DDC66 adds r1, r5, 0 @@ -1737,26 +1737,26 @@ _081DDC66: ldr r0, [sp] adds r1, r5, 0 bl TrkVolPitSet - ldr r0, [r5, 0x4] - str r0, [r4, 0x10] + ldr r0, [r5, o_MusicPlayerTrack_gateTime] + str r0, [r4, o_SoundChannel_gateTime] ldr r0, [sp, 0x10] - strb r0, [r4, 0x13] + strb r0, [r4, o_SoundChannel_priority] ldr r0, [sp, 0x8] - strb r0, [r4, 0x8] + strb r0, [r4, o_SoundChannel_key] ldr r0, [sp, 0x14] - strb r0, [r4, 0x14] + strb r0, [r4, o_SoundChannel_rhythmPan] mov r6, r9 - ldrb r0, [r6] - strb r0, [r4, 0x1] - ldr r7, [r6, 0x4] - str r7, [r4, 0x24] - ldr r0, [r6, 0x8] - str r0, [r4, 0x4] - ldrh r0, [r5, 0x1E] - strh r0, [r4, 0xC] + ldrb r0, [r6, o_ToneData_type] + strb r0, [r4, o_SoundChannel_type] + ldr r7, [r6, o_ToneData_wav] + str r7, [r4, o_SoundChannel_wav] + ldr r0, [r6, o_ToneData_attack] + str r0, [r4, o_SoundChannel_attack] + ldrh r0, [r5, o_MusicPlayerTrack_pseudoEchoVolume] + strh r0, [r4, o_SoundChannel_pseudoEchoVolume] bl ChnVolSetAsm - ldrb r1, [r4, 0x8] - movs r0, 0x8 + ldrb r1, [r4, o_SoundChannel_key] + movs r0, o_MusicPlayerTrack_keyM ldrsb r0, [r5, r0] adds r3, r1, r0 bpl _081DDCA0 @@ -1766,9 +1766,9 @@ _081DDCA0: cmp r6, 0 beq _081DDCCE mov r6, r9 - ldrb r0, [r6, 0x2] - strb r0, [r4, 0x1E] - ldrb r1, [r6, 0x3] + ldrb r0, [r6, o_ToneData_length] + strb r0, [r4, o_CgbChannel_length] + ldrb r1, [r6, o_ToneData_pan_sweep] movs r0, 0x80 tst r0, r1 bne _081DDCBA @@ -1778,29 +1778,29 @@ _081DDCA0: _081DDCBA: movs r1, 0x8 _081DDCBC: - strb r1, [r4, 0x1F] - ldrb r2, [r5, 0x9] + strb r1, [r4, o_CgbChannel_sweep] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r1, r3, 0 ldr r0, [sp, 0xC] ldr r3, [sp, 0x4] - ldr r3, [r3, 0x30] + ldr r3, [r3, o_SoundInfo_MidiKeyToCgbFreq] bl call_r3 b _081DDCDC _081DDCCE: - ldr r0, [r5, #o_MusicPlayerTrack_unk_3C] - str r0, [r4, 0x18] - ldrb r2, [r5, 0x9] + ldr r0, [r5, o_MusicPlayerTrack_unk_3C] + str r0, [r4, o_SoundChannel_count] + ldrb r2, [r5, o_MusicPlayerTrack_pitM] adds r1, r3, 0 adds r0, r7, 0 bl MidiKeyToFreq _081DDCDC: - str r0, [r4, 0x20] - movs r0, 0x80 - strb r0, [r4] - ldrb r1, [r5] + str r0, [r4, o_SoundChannel_frequency] + movs r0, SOUND_CHANNEL_SF_START + strb r0, [r4, o_SoundChannel_statusFlags] + ldrb r1, [r5, o_MusicPlayerTrack_flags] movs r0, 0xF0 ands r0, r1 - strb r0, [r5] + strb r0, [r5, o_MusicPlayerTrack_flags] _081DDCEA: add sp, 0x18 pop {r0-r7} @@ -1816,37 +1816,37 @@ _081DDCEA: thumb_func_start ply_endtie ply_endtie: push {r4,r5} - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] cmp r3, 0x80 bhs _081DDD16 - strb r3, [r1, #o_MusicPlayerTrack_key] + strb r3, [r1, o_MusicPlayerTrack_key] adds r2, 0x1 - str r2, [r1, #o_MusicPlayerTrack_cmdPtr] + str r2, [r1, o_MusicPlayerTrack_cmdPtr] b _081DDD18 _081DDD16: - ldrb r3, [r1, #o_MusicPlayerTrack_key] + ldrb r3, [r1, o_MusicPlayerTrack_key] _081DDD18: - ldr r1, [r1, #o_MusicPlayerTrack_chan] + ldr r1, [r1, o_MusicPlayerTrack_chan] cmp r1, 0 beq _081DDD40 - movs r4, 0x83 - movs r5, 0x40 + movs r4, SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_ENV + movs r5, SOUND_CHANNEL_SF_STOP _081DDD22: - ldrb r2, [r1, #o_SoundChannel_status] + ldrb r2, [r1, o_SoundChannel_statusFlags] tst r2, r4 beq _081DDD3A tst r2, r5 bne _081DDD3A - ldrb r0, [r1, #o_SoundChannel_mk] + ldrb r0, [r1, o_SoundChannel_midiKey] cmp r0, r3 bne _081DDD3A - movs r0, 0x40 + movs r0, SOUND_CHANNEL_SF_STOP orrs r2, r0 - strb r2, [r1, #o_SoundChannel_status] + strb r2, [r1, o_SoundChannel_statusFlags] b _081DDD40 _081DDD3A: - ldr r1, [r1, #o_SoundChannel_np] + ldr r1, [r1, o_SoundChannel_nextChannelPointer] cmp r1, 0 bne _081DDD22 _081DDD40: @@ -1857,27 +1857,27 @@ _081DDD40: thumb_func_start clear_modM clear_modM: movs r2, 0 - strb r2, [r1, #o_MusicPlayerTrack_modM] - strb r2, [r1, #o_MusicPlayerTrack_lfoSpeedC] - ldrb r2, [r1, #o_MusicPlayerTrack_modT] + strb r2, [r1, o_MusicPlayerTrack_modM] + strb r2, [r1, o_MusicPlayerTrack_lfoSpeedC] + ldrb r2, [r1, o_MusicPlayerTrack_modT] cmp r2, 0 bne _081DDD54 - movs r2, 0xC + movs r2, MPT_FLG_PITCHG b _081DDD56 _081DDD54: - movs r2, 0x3 + movs r2, MPT_FLG_VOLCHG _081DDD56: - ldrb r3, [r1, #o_MusicPlayerTrack_flags] + ldrb r3, [r1, o_MusicPlayerTrack_flags] orrs r3, r2 - strb r3, [r1, #o_MusicPlayerTrack_flags] + strb r3, [r1, o_MusicPlayerTrack_flags] bx lr thumb_func_end clear_modM thumb_func_start ld_r3_tp_adr_i ld_r3_tp_adr_i_unchecked: - ldr r2, [r1, #o_MusicPlayerTrack_cmdPtr] + ldr r2, [r1, o_MusicPlayerTrack_cmdPtr] adds r3, r2, 1 - str r3, [r1, #o_MusicPlayerTrack_cmdPtr] + str r3, [r1, o_MusicPlayerTrack_cmdPtr] ldrb r3, [r2] bx lr thumb_func_end ld_r3_tp_adr_i @@ -1886,7 +1886,7 @@ ld_r3_tp_adr_i_unchecked: ply_lfos: mov r12, lr bl ld_r3_tp_adr_i_unchecked - strb r3, [r1, #o_MusicPlayerTrack_lfoSpeed] + strb r3, [r1, o_MusicPlayerTrack_lfoSpeed] cmp r3, 0 bne _081DDD7C bl clear_modM @@ -1898,7 +1898,7 @@ _081DDD7C: ply_mod: mov r12, lr bl ld_r3_tp_adr_i_unchecked - strb r3, [r1, #o_MusicPlayerTrack_mod] + strb r3, [r1, o_MusicPlayerTrack_mod] cmp r3, 0 bne _081DDD90 bl clear_modM diff --git a/src/m4a_tables.c b/src/m4a_tables.c index dfd285b1f3..9a4ea32e69 100644 --- a/src/m4a_tables.c +++ b/src/m4a_tables.c @@ -83,7 +83,7 @@ const u8 gScaleTable[] = 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, }; -const u32 gFreqTable[12] = +const u32 gFreqTable[] = { 2147483648u, 2275179671u, @@ -99,7 +99,7 @@ const u32 gFreqTable[12] = 4053909305u, }; -const u16 gPcmSamplesPerVBlankTable[12] = +const u16 gPcmSamplesPerVBlankTable[] = { 96, 132, @@ -130,7 +130,7 @@ const u8 gCgbScaleTable[] = 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, }; -const s16 gCgbFreqTable[12] = +const s16 gCgbFreqTable[] = { -2004, -1891, diff --git a/src/mail.c b/src/mail.c index 55bc9ed003..04464f06b1 100644 --- a/src/mail.c +++ b/src/mail.c @@ -16,7 +16,6 @@ #include "gpu_regs.h" #include "bg.h" #include "pokemon_icon.h" -#include "constants/species.h" #include "malloc.h" #include "easy_chat.h" #include "constants/rgb.h" diff --git a/src/mail_data.c b/src/mail_data.c index b0b05e8fe0..e0553af993 100644 --- a/src/mail_data.c +++ b/src/mail_data.c @@ -3,7 +3,6 @@ #include "constants/items.h" #include "pokemon.h" #include "pokemon_icon.h" -#include "constants/species.h" #include "text.h" #include "international_string_util.h" diff --git a/src/main.c b/src/main.c index b3b76b1fbc..f0ad4ce942 100644 --- a/src/main.c +++ b/src/main.c @@ -75,33 +75,19 @@ static EWRAM_DATA u16 gTrainerId = 0; static void UpdateLinkAndCallCallbacks(void); static void InitMainCallbacks(void); static void CallCallbacks(void); -//static void SeedRngWithRtc(void); +static void SeedRngWithRtc(void); static void ReadKeys(void); void InitIntrHandlers(void); static void WaitForVBlank(void); void EnableVCountIntrAtLine150(void); +#define B_START_SELECT (B_BUTTON | START_BUTTON | SELECT_BUTTON) + void AgbMain() { -#if MODERN // Modern compilers are liberal with the stack on entry to this function, // so RegisterRamReset may crash if it resets IWRAM. - RegisterRamReset(RESET_ALL & ~RESET_IWRAM); - asm("mov\tr1, #0xC0\n" - "\tlsl\tr1, r1, #0x12\n" - "\tmov r2, #0xFC\n" - "\tlsl r2, r2, #0x7\n" - "\tadd\tr2, r1, r2\n" - "\tmov\tr0, #0\n" - "\tmov\tr3, r0\n" - "\tmov\tr4, r0\n" - "\tmov\tr5, r0\n" - ".LCU0:\n" - "\tstmia r1!, {r0, r3, r4, r5}\n" - "\tcmp\tr1, r2\n" - "\tbcc\t.LCU0\n" - ); -#else +#if !MODERN RegisterRamReset(RESET_ALL); #endif //MODERN *(vu16 *)BG_PLTT = 0x7FFF; @@ -116,7 +102,9 @@ void AgbMain() CheckForFlashMemory(); InitMainCallbacks(); InitMapMusic(); - //SeedRngWithRtc(); see comment at SeedRngWithRtc declaration below +#ifdef BUGFIX + SeedRngWithRtc(); // see comment at SeedRngWithRtc definition below +#endif ClearDma3Requests(); ResetBgs(); SetDefaultFontsPointer(); @@ -134,11 +122,9 @@ void AgbMain() { ReadKeys(); - if (!gSoftResetDisabled - && JOY_HELD_RAW(A_BUTTON) - && JOY_HELD_RAW(B_BUTTON) - && JOY_HELD_RAW(START_BUTTON) - && JOY_HELD_RAW(SELECT_BUTTON)) //The reset key combo A + B + START + SELECT + if (gSoftResetDisabled == FALSE + && (gMain.heldKeysRaw & A_BUTTON) + && (gMain.heldKeysRaw & B_START_SELECT) == B_START_SELECT) { rfu_REQ_stopMode(); rfu_waitREQComplete(); @@ -229,13 +215,15 @@ void EnableVCountIntrAtLine150(void) EnableInterrupts(INTR_FLAG_VCOUNT); } -// oops! FRLG commented this out to remove RTC, however Emerald didnt undo this! -//static void SeedRngWithRtc(void) -//{ -// u32 seed = RtcGetMinuteCount(); -// seed = (seed >> 16) ^ (seed & 0xFFFF); -// SeedRng(seed); -//} +// FRLG commented this out to remove RTC, however Emerald didn't undo this! +#ifdef BUGFIX +static void SeedRngWithRtc(void) +{ + u32 seed = RtcGetMinuteCount(); + seed = (seed >> 16) ^ (seed & 0xFFFF); + SeedRng(seed); +} +#endif void InitKeys(void) { @@ -262,7 +250,9 @@ static void ReadKeys(void) if (keyInput != 0 && gMain.heldKeys == keyInput) { - if (--gMain.keyRepeatCounter == 0) + gMain.keyRepeatCounter--; + + if (gMain.keyRepeatCounter == 0) { gMain.newAndRepeatedKeys = keyInput; gMain.keyRepeatCounter = gKeyRepeatContinueDelay; @@ -341,7 +331,7 @@ static void VBlankIntr(void) { if (gWirelessCommType != 0) RfuVSync(); - else if (!gLinkVSyncDisabled) + else if (gLinkVSyncDisabled == FALSE) LinkVSync(); gMain.vblankCounter1++; diff --git a/src/main_menu.c b/src/main_menu.c index e8403cdb17..2c27b673a4 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -3,7 +3,6 @@ #include "bg.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" #include "decompress.h" #include "event_data.h" @@ -29,7 +28,6 @@ #include "scanline_effect.h" #include "sound.h" #include "sprite.h" -#include "string.h" #include "strings.h" #include "string_util.h" #include "task.h" diff --git a/src/match_call.c b/src/match_call.c index 1899eabf03..723562ade1 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -32,7 +32,6 @@ #include "constants/maps.h" #include "constants/region_map_sections.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" struct MatchCallState @@ -1335,7 +1334,7 @@ static void InitMatchCallTextPrinter(int windowId, const u8 *str) printerTemplate.currentY = 1; printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.style = 0; + printerTemplate.unk = 0; printerTemplate.fgColor = 10; printerTemplate.bgColor = 8; printerTemplate.shadowColor = 14; @@ -1774,7 +1773,7 @@ static int GetNumOwnedBadges(void) static bool32 sub_8196D74(int matchCallId) { int dayCount; - u32 otId; + int otId; u16 easyChatWord; int numRematchTrainersFought; int var0, var1, var2; @@ -1818,10 +1817,13 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) } *topicTextId = 3; break; + #ifdef BUGFIX + case FRONTIER_FACILITY_PIKE: + #else case FRONTIER_FACILITY_FACTORY: + #endif for (i = 0; i < 2; i++) { - // BUG: should be looking at battle factory records. if (streak < gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]) streak = gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]; } @@ -1849,12 +1851,15 @@ static u16 GetFrontierStreakInfo(u16 facilityId, u32 *topicTextId) } *topicTextId = 2; break; + #ifdef BUGFIX + case FRONTIER_FACILITY_FACTORY: + #else case FRONTIER_FACILITY_PIKE: + #endif for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { - // BUG: should be looking at battle pike records. if (streak < gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[i][j]) streak = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[i][j]; } diff --git a/src/menu.c b/src/menu.c index 9c5dec024e..4813f7b028 100644 --- a/src/menu.c +++ b/src/menu.c @@ -25,7 +25,7 @@ #define STD_WINDOW_PALETTE_NUM 14 #define STD_WINDOW_BASE_TILE_NUM 0x214 -struct MoveMenuInfoIcon +struct MenuInfoIcon { u8 width; u8 height; @@ -98,34 +98,34 @@ const u16 gUnknown_0860F0B0[] = INCBIN_U16("graphics/interface/860F0B0.gbapal"); const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY }; // Table of move info icon offsets in graphics/interface_fr/menu.png -const struct MoveMenuInfoIcon gMoveMenuInfoIcons[] = +static const struct MenuInfoIcon sMenuInfoIcons[] = { // { width, height, offset } - { 12, 12, 0x00 }, // Unused - { 32, 12, 0x20 }, // Normal icon - { 32, 12, 0x64 }, // Fight icon - { 32, 12, 0x60 }, // Flying icon - { 32, 12, 0x80 }, // Poison icon - { 32, 12, 0x48 }, // Ground icon - { 32, 12, 0x44 }, // Rock icon - { 32, 12, 0x6C }, // Bug icon - { 32, 12, 0x68 }, // Ghost icon - { 32, 12, 0x88 }, // Steel icon - { 32, 12, 0xA4 }, // ??? (Mystery) icon - { 32, 12, 0x24 }, // Fire icon - { 32, 12, 0x28 }, // Water icon - { 32, 12, 0x2C }, // Grass icon - { 32, 12, 0x40 }, // Electric icon - { 32, 12, 0x84 }, // Psychic icon - { 32, 12, 0x4C }, // Ice icon - { 32, 12, 0xA0 }, // Dragon icon - { 32, 12, 0x8C }, // Dark icon - { 42, 12, 0xA8 }, // -Type- icon - { 42, 12, 0xC0 }, // -Power- icon - { 42, 12, 0xC8 }, // -Accuracy- icon - { 42, 12, 0xE0 }, // -PP- icon - { 42, 12, 0xE8 }, // -Effect- icon - { 8, 8, 0xAE }, // Unused (Small white pokeball) - { 8, 8, 0xAF }, // Unused (Small dark pokeball) + { 12, 12, 0x00 }, // Unused + [TYPE_NORMAL + 1] = { 32, 12, 0x20 }, + [TYPE_FIGHTING + 1] = { 32, 12, 0x64 }, + [TYPE_FLYING + 1] = { 32, 12, 0x60 }, + [TYPE_POISON + 1] = { 32, 12, 0x80 }, + [TYPE_GROUND + 1] = { 32, 12, 0x48 }, + [TYPE_ROCK + 1] = { 32, 12, 0x44 }, + [TYPE_BUG + 1] = { 32, 12, 0x6C }, + [TYPE_GHOST + 1] = { 32, 12, 0x68 }, + [TYPE_STEEL + 1] = { 32, 12, 0x88 }, + [TYPE_MYSTERY + 1] = { 32, 12, 0xA4 }, + [TYPE_FIRE + 1] = { 32, 12, 0x24 }, + [TYPE_WATER + 1] = { 32, 12, 0x28 }, + [TYPE_GRASS + 1] = { 32, 12, 0x2C }, + [TYPE_ELECTRIC + 1] = { 32, 12, 0x40 }, + [TYPE_PSYCHIC + 1] = { 32, 12, 0x84 }, + [TYPE_ICE + 1] = { 32, 12, 0x4C }, + [TYPE_DRAGON + 1] = { 32, 12, 0xA0 }, + [TYPE_DARK + 1] = { 32, 12, 0x8C }, + [MENU_INFO_ICON_TYPE] = { 42, 12, 0xA8 }, + [MENU_INFO_ICON_POWER] = { 42, 12, 0xC0 }, + [MENU_INFO_ICON_ACCURACY] = { 42, 12, 0xC8 }, + [MENU_INFO_ICON_PP] = { 42, 12, 0xE0 }, + [MENU_INFO_ICON_EFFECT] = { 42, 12, 0xE8 }, // Unused + [MENU_INFO_ICON_BALL_RED] = { 8, 8, 0xAE }, // For placed decorations in Secret Base + [MENU_INFO_ICON_BALL_BLUE] = { 8, 8, 0xAF }, // For placed decorations in player's room }; @@ -180,7 +180,7 @@ u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed printer.currentY = 1; printer.letterSpacing = 0; printer.lineSpacing = 0; - printer.style = 0; + printer.unk = 0; printer.fgColor = fgColor; printer.bgColor = bgColor; printer.shadowColor = shadowColor; @@ -1049,13 +1049,13 @@ s8 ProcessMenuInput_other(void) { return MENU_B_PRESSED; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { PlaySE(SE_SELECT); Menu_MoveCursor(-1); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { PlaySE(SE_SELECT); Menu_MoveCursor(1); @@ -1075,17 +1075,17 @@ s8 Menu_ProcessInputNoWrapAround_other(void) PlaySE(SE_SELECT); return sMenu.cursorPos; } - if (JOY_NEW(B_BUTTON)) + else if (JOY_NEW(B_BUTTON)) { return MENU_B_PRESSED; } - if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) { if (oldPos != Menu_MoveCursorNoWrapAround(-1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) { if (oldPos != Menu_MoveCursorNoWrapAround(1)) PlaySE(SE_SELECT); @@ -1130,7 +1130,7 @@ void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 l printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); + printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN); printer.letterSpacing = letterSpacing; printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); printer.x = left; @@ -1194,7 +1194,7 @@ void sub_8198AF8(const struct WindowTemplate *window, u8 fontId, u8 left, u8 top printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); + printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN); printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); @@ -1252,7 +1252,7 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u printer.fgColor = GetFontAttribute(fontId, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(fontId, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(fontId, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(fontId, FONTATTR_STYLE); + printer.unk = GetFontAttribute(fontId, FONTATTR_UNKNOWN); printer.letterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); printer.lineSpacing = GetFontAttribute(fontId, FONTATTR_LINE_SPACING); @@ -1496,25 +1496,25 @@ s8 sub_81993D8(void) { return MENU_B_PRESSED; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_UP); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_NONE, MENU_CURSOR_DELTA_DOWN); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_LEFT, MENU_CURSOR_DELTA_NONE); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { PlaySE(SE_SELECT); ChangeListMenuCursorPosition(MENU_CURSOR_DELTA_RIGHT, MENU_CURSOR_DELTA_NONE); @@ -1538,25 +1538,25 @@ s8 sub_8199484(void) { return MENU_B_PRESSED; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { if (oldPos != ChangeGridMenuCursorPosition(0, -1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { if (oldPos != ChangeGridMenuCursorPosition(0, 1)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { if (oldPos != ChangeGridMenuCursorPosition(1, 0)) PlaySE(SE_SELECT); @@ -1616,7 +1616,7 @@ void sub_81995E4(u8 windowId, u8 itemCount, const struct MenuAction *strs, const printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(1, FONTATTR_STYLE); + printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; printer.x = 8; @@ -1650,7 +1650,7 @@ void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 pa printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(1, FONTATTR_STYLE); + printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; @@ -1681,7 +1681,7 @@ void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct M printer.fgColor = GetFontAttribute(1, FONTATTR_COLOR_FOREGROUND); printer.bgColor = GetFontAttribute(1, FONTATTR_COLOR_BACKGROUND); printer.shadowColor = GetFontAttribute(1, FONTATTR_COLOR_SHADOW); - printer.style = GetFontAttribute(1, FONTATTR_STYLE); + printer.unk = GetFontAttribute(1, FONTATTR_UNKNOWN); printer.letterSpacing = 0; printer.lineSpacing = 0; @@ -1949,7 +1949,7 @@ void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const printer.currentY = printer.y; printer.letterSpacing = GetFontAttribute(fontId, 2); printer.lineSpacing = GetFontAttribute(fontId, 3); - printer.style = 0; + printer.unk = 0; printer.fgColor = color[1]; printer.bgColor = color[0]; printer.shadowColor = color[2]; @@ -1970,7 +1970,7 @@ void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 left, u8 top, u8 le printer.currentY = printer.y; printer.letterSpacing = letterSpacing; printer.lineSpacing = lineSpacing; - printer.style = 0; + printer.unk = 0; printer.fgColor = color[1]; printer.bgColor = color[0]; printer.shadowColor = color[2]; @@ -1991,7 +1991,7 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left printer.currentY = top; printer.letterSpacing = letterSpacing; printer.lineSpacing = lineSpacing; - printer.style = 0; + printer.unk = 0; printer.fgColor = GetFontAttribute(fontId, 5); printer.bgColor = GetFontAttribute(fontId, 6); @@ -2016,7 +2016,7 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src { int loopSrcY, loopDstY, loopSrcX, loopDstX, xEnd, yEnd, multiplierSrcY, multiplierDstY; const u8 *pixelsSrc; - u16 *pixelsDst; + u8 *pixelsDst; u16 toOrr; if (dst->width - dstX < width) @@ -2037,53 +2037,52 @@ void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 src for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) { pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B); - pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)( loopDstY << 0x1d) >> 0x1B); + pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B); - if ((uintptr_t )pixelsDst & 0x1) + if ((uintptr_t)pixelsDst & 0x1) { - pixelsDst = (void*)(pixelsDst) - 1; + pixelsDst--; if (loopDstX & 0x1) { - toOrr = *pixelsDst & 0x0fff; + toOrr = *(vu16*)pixelsDst; + toOrr &= 0x0fff; if (loopSrcX & 0x1) - *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 8); + toOrr |= ((*pixelsSrc & 0xf0) << 8); else - *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 12); + toOrr |= ((*pixelsSrc & 0x0f) << 12); } else { - toOrr = *pixelsDst & 0xf0ff; + toOrr = *(vu16*)pixelsDst; + toOrr &= 0xf0ff; if (loopSrcX & 0x1) - *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 4); + toOrr |= ((*pixelsSrc & 0xf0) << 4); else - *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 8); + toOrr |= ((*pixelsSrc & 0x0f) << 8); } } else { if (loopDstX & 1) { - toOrr = *pixelsDst & 0xff0f; + toOrr = *(vu16*)pixelsDst; + toOrr &= 0xff0f; if (loopSrcX & 1) - *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 0); + toOrr |= ((*pixelsSrc & 0xf0) << 0); else - *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 4); + toOrr |= ((*pixelsSrc & 0x0f) << 4); } else { - toOrr = *pixelsDst & 0xfff0; + toOrr = *(vu16*)pixelsDst; + toOrr &= 0xfff0; if (loopSrcX & 1) - *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) >> 4); + toOrr |= ((*pixelsSrc & 0xf0) >> 4); else - *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) >> 0); + toOrr |= ((*pixelsSrc & 0x0f) >> 0); } } - - // Needed to match, urgh. - #ifndef NONMATCHING - asm("":::"r4"); - pixelsDst++;pixelsDst--; - #endif // NONMATCHING + *(vu16*)pixelsDst = toOrr; } } } @@ -2119,9 +2118,9 @@ void ListMenuLoadStdPalAt(u8 palOffset, u8 palId) LoadPalette(palette, palOffset, 0x20); } -void blit_move_info_icon(u8 windowId, u8 iconId, u16 x, u16 y) +void BlitMenuInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y) { - BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gMoveMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, gMoveMenuInfoIcons[iconId].width, gMoveMenuInfoIcons[iconId].height); + BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + sMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, sMenuInfoIcons[iconId].width, sMenuInfoIcons[iconId].height); } void BufferSaveMenuText(u8 textId, u8 *dest, u8 color) diff --git a/src/menu_helpers.c b/src/menu_helpers.c index c80e52d270..b31d84a1e3 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -183,7 +183,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) { s16 valBefore = (*arg0); - if (JOY_REPEAT(DPAD_ANY) == DPAD_UP) + if ((JOY_REPEAT(DPAD_ANY)) == DPAD_UP) { (*arg0)++; if ((*arg0) > arg1) @@ -199,7 +199,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_DOWN) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_DOWN) { (*arg0)--; if ((*arg0) <= 0) @@ -215,7 +215,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_RIGHT) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_RIGHT) { (*arg0) += 10; if ((*arg0) > arg1) @@ -231,7 +231,7 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return TRUE; } } - else if (JOY_REPEAT(DPAD_ANY) == DPAD_LEFT) + else if ((JOY_REPEAT(DPAD_ANY)) == DPAD_LEFT) { (*arg0) -= 10; if ((*arg0) <= 0) diff --git a/src/menu_specialized.c b/src/menu_specialized.c index f9da20e119..7de9638931 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -25,7 +25,6 @@ #include "window.h" #include "constants/berry.h" #include "constants/songs.h" -#include "constants/species.h" #include "gba/io_reg.h" extern const struct CompressedSpriteSheet gMonFrontPicTable[]; @@ -250,7 +249,7 @@ void sub_81D1D04(u8 a0) sUnknown_0203CF48[a0] = 0xFF; } -static u8 sub_81D1D34(u8 a0) // unused +static u8 sub_81D1D34(u8 a0) { return sUnknown_0203CF48[a0]; } @@ -320,7 +319,7 @@ void sub_81D1EC0(void) Free(sUnknown_0203CF4C); } -void sub_81D1ED4(struct ConditionGraph *a0) +void InitConditionGraphData(struct ConditionGraph *graph) { u8 i, j; @@ -328,22 +327,22 @@ void sub_81D1ED4(struct ConditionGraph *a0) { for (i = 0; i < 10; i++) { - a0->unk64[i][j].unk0 = 0; - a0->unk64[i][j].unk2 = 0; + graph->unk64[i][j].unk0 = 0; + graph->unk64[i][j].unk2 = 0; } for (i = 0; i < 4; i++) { - a0->unk0[i][j] = 0; - a0->unk14[i][j].unk0 = 0x9B; - a0->unk14[i][j].unk2 = 0x5B; + graph->stat[i][j] = 0; + graph->unk14[i][j].unk0 = 155; + graph->unk14[i][j].unk2 = 91; } - a0->unk12C[j].unk0 = 0; - a0->unk12C[j].unk2 = 0; + graph->unk12C[j].unk0 = 0; + graph->unk12C[j].unk2 = 0; } - a0->unk354 = 0; - a0->unk352 = 0; + graph->unk354 = 0; + graph->unk352 = 0; } void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2) @@ -351,7 +350,7 @@ void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 * u16 i, j; s32 r5, r6; - for (i = 0; i < 5; i++) + for (i = 0; i < FLAVOR_COUNT; i++) { r5 = arg1[i].unk0 << 8; r6 = ((arg2[i].unk0 - arg1[i].unk0) << 8) / 10; @@ -388,25 +387,25 @@ bool32 TransitionConditionGraph(struct ConditionGraph *graph) } } -void sub_81D20AC(struct ConditionGraph *a0) +void InitConditionGraphState(struct ConditionGraph *graph) { - a0->unk355 = 0; + graph->state = 0; } -bool8 sub_81D20BC(struct ConditionGraph *graph) +bool8 SetupConditionGraphScanlineParams(struct ConditionGraph *graph) { struct ScanlineEffectParams params; - switch (graph->unk355) + switch (graph->state) { case 0: ScanlineEffect_Clear(); - graph->unk355++; + graph->state++; return TRUE; case 1: params = sConditionGraphScanline; ScanlineEffect_SetParams(params); - graph->unk355++; + graph->state++; return FALSE; default: return FALSE; @@ -432,7 +431,7 @@ void sub_81D2108(struct ConditionGraph *graph) graph->unk354 = 0; } -void sub_81D21DC(u8 bg) +void SetConditionGraphIOWindows(u8 bg) { u32 flags; @@ -881,34 +880,30 @@ s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst) // Gets the name/gender/level string for the condition menu static u8 *GetConditionMenuMonString(u8 *dst, u16 boxId, u16 monId) { - u16 species, level, gender; + u16 box, mon, species, level, gender; struct BoxPokemon *boxMon; u8 *str; + box = boxId; + mon = monId; *(dst++) = EXT_CTRL_CODE_BEGIN; *(dst++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; *(dst++) = TEXT_COLOR_BLUE; *(dst++) = TEXT_COLOR_TRANSPARENT; *(dst++) = TEXT_COLOR_LIGHT_BLUE; - if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) - { + if (GetBoxOrPartyMonData(box, mon, MON_DATA_IS_EGG, NULL)) return StringCopyPadded(dst, gText_EggNickname, 0, 12); - } - GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst); + GetBoxOrPartyMonData(box, mon, MON_DATA_NICKNAME, dst); StringGetEnd10(dst); - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); - if (boxId == TOTAL_BOXES_COUNT) // Party mon. + species = GetBoxOrPartyMonData(box, mon, MON_DATA_SPECIES, NULL); + if (box == TOTAL_BOXES_COUNT) // Party mon. { - level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - gender = GetMonGender(&gPlayerParty[monId]); + level = GetMonData(&gPlayerParty[mon], MON_DATA_LEVEL); + gender = GetMonGender(&gPlayerParty[mon]); } else { - // Needed to match, feel free to remove. - boxId++, boxId--; - monId++, monId--; - - boxMon = GetBoxedMonPtr(boxId, monId); + boxMon = GetBoxedMonPtr(box, mon); gender = GetBoxMonGender(boxMon); level = GetLevelFromBoxMonExp(boxMon); } @@ -981,6 +976,8 @@ static u8 *BufferConditionMenuSpacedStringN(u8 *dst, const u8 *src, s16 n) void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel) { u16 i; + u16 box = boxId; + u16 mon = monId; // In this and the below 2 functions, numMons is passed as the number of menu selections (which includes Cancel) // To indicate that the Cancel needs to be subtracted they pass an additional bool @@ -990,21 +987,16 @@ void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId if (partyId != numMons) { - GetConditionMenuMonString(nameDst, boxId, monId); + GetConditionMenuMonString(nameDst, box, mon); locationDst[0] = EXT_CTRL_CODE_BEGIN; locationDst[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; locationDst[2] = TEXT_COLOR_BLUE; locationDst[3] = TEXT_COLOR_TRANSPARENT; locationDst[4] = TEXT_COLOR_LIGHT_BLUE; - if (boxId == TOTAL_BOXES_COUNT) // Party mon. - { + if (box == TOTAL_BOXES_COUNT) // Party mon. BufferConditionMenuSpacedStringN(&locationDst[5], gText_InParty, 8); - } else - { - boxId++;boxId--; // Again...Someone fix this maybe? - BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(boxId), 8); - } + BufferConditionMenuSpacedStringN(&locationDst[5], GetBoxNamePtr(box), 8); } else { @@ -1026,23 +1018,23 @@ void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 if (partyId != numMons) { - graph->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - graph->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - graph->unk0[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - graph->unk0[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - graph->unk0[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + graph->stat[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + graph->stat[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + graph->stat[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + graph->stat[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + graph->stat[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF) ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u : 9; - sub_81D2754(graph->unk0[id], graph->unk14[id]); + sub_81D2754(graph->stat[id], graph->unk14[id]); } else { for (i = 0; i < FLAVOR_COUNT; i++) { - graph->unk0[id][i] = 0; + graph->stat[id][i] = 0; graph->unk14[id][i].unk0 = 155; graph->unk14[id][i].unk2 = 91; } diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 59baa978fd..18dc85600c 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -970,10 +970,13 @@ bool8 MetatileBehavior_IsUnableToEmerge(u8 metatileBehavior) { // BUG: The player is unintentionally able to emerge on water doors. // Also the narrower underwater door in the underwater tileset has the wrong metatile behavior. This causes the dive glitch. - // To fix that add || metatileBehavior == MB_WATER_DOOR to the if statement below and - // change the metatile behavior of the narrower water door with porymaps tileset editor. + // To fix change the metatile behavior of the narrower water door with porymap's tileset editor. if (metatileBehavior == MB_NO_SURFACING - || metatileBehavior == MB_SEAWEED_NO_SURFACING) + || metatileBehavior == MB_SEAWEED_NO_SURFACING + #ifdef BUGFIX + || metatileBehavior == MB_WATER_DOOR + #endif + ) return TRUE; else return FALSE; diff --git a/src/mevent2.c b/src/mevent2.c index 7a2edc7f5d..3209c585a3 100755 --- a/src/mevent2.c +++ b/src/mevent2.c @@ -10,7 +10,6 @@ #include "new_game.h" #include "mevent.h" #include "constants/mevent.h" -#include "constants/species.h" static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE; diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index 847449c450..d732e3045d 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -1,5 +1,4 @@ #include "global.h" -#include "constants/species.h" #include "bg.h" #include "gpu_regs.h" #include "palette.h" diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 607083e267..ef7bf7228c 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -168,7 +168,7 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { .numColors = 15, .delay = 5, .numFadeCycles = -1, - .maxBlendCoeff = -5, + .maxBlendCoeff = 11, .fadeType = 1, .restorePaletteOnUnload = FALSE, .unk7_7 = 1, @@ -412,9 +412,10 @@ void DoMirageTowerCeilingCrumble(void) static void WaitCeilingCrumble(u8 taskId) { - u16 *data = (u16 *)gTasks[taskId].data; + u16 *data = gTasks[taskId].data; + data[1]++; // Either wait 1000 frames, or until all 16 crumble sprites and the one screen-shake task are completed. - if (++data[1] == 1000 || data[0] == 17) + if (data[1] == 1000 || data[0] == 17) gTasks[taskId].func = FinishCeilingCrumbleTask; } @@ -690,7 +691,7 @@ static void DoFossilFallAndSink(u8 taskId) if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) return; DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]); - FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC); + FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);; FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage); FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles); FREE_AND_SET_NULL(sUnknown_0203CF0C); @@ -725,8 +726,8 @@ static void sub_81BF248(struct Sprite *sprite) static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e) { + u8 r5, r4, r0, r2; u16 var, var2; - u8 r0, r5, r4, r2; u8 r2_1, r4_1; u8 b2, c2; @@ -738,25 +739,23 @@ static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e) r4_1 = r4 & 7; r2_1 = r2 & 7; - - gUnknown_030012A8[2] = r4 & 7; //should be r4_1 but that doesn't match - gUnknown_030012A8[3] = r2 & 7; //should be r2_1 but that doesn't match - + gUnknown_030012A8[2] = r4 & 7; //should be using r4_1, but that doesn't match + gUnknown_030012A8[3] = r2 & 7; //" + r0 = r2 / 8; r5 = r4 / 8; - - gUnknown_030012A8[4] = r2 / 8; //should just be r0, but that doesn't match - gUnknown_030012A8[5] = r4 / 8; //should be just r5 but that doesn't match + + gUnknown_030012A8[4] = r2 / 8; //should be using r0, but that doesn't match + gUnknown_030012A8[5] = r4 / 8; //should be using r5, but that doesn't match var = (d / 8) * (r5 * 64) + (r0 * 64); - gUnknown_030012A8[6] = var; - + var2 = var + ((r4_1 * 8) + r2_1); var2 /= 2; - gUnknown_030012A8[7] = var + ((r4_1 * 8) + r2_1); // should be var2 with var2 being divided by 2 AFTER this assignment, but that doesn't match. - + gUnknown_030012A8[7] = var + ((r4_1 * 8) + r2_1); //should be using var2 with var2 being divided afterwards, but that doesn't match + b2 = ((b % 2) ^ 1); - c2 = (c << (b2 << 2)) | (15 << (((b2 ^ 1) << 2))); + c2 = (c << (b2 << 2)) | 15 << (((b2 ^ 1) << 2)); a[var2 + (e * 32)] &= c2; } diff --git a/src/mon_markings.c b/src/mon_markings.c index c2afdda833..a819d4f9ab 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -390,7 +390,7 @@ void sub_811FAF8(void) } } -bool8 sub_811FBA4(void) +bool8 MonMarkingsMenuHandleInput(void) { u16 i; @@ -564,7 +564,7 @@ static void sub_811FF7C(struct Sprite *sprite) sprite->pos1.y = (16 * sMenu->cursorPos) + sprite->data[0]; } -struct Sprite *sub_811FF94(u16 tileTag, u16 paletteTag, const u16 *palette) +struct Sprite *CreateMonMarkingsSpriteWithPal(u16 tileTag, u16 paletteTag, const u16 *palette) { if (!palette) palette = gUnknown_0859E65C; diff --git a/src/multiboot.c b/src/multiboot.c index c7e14392e8..19245b5b33 100644 --- a/src/multiboot.c +++ b/src/multiboot.c @@ -1,3 +1,4 @@ +#include "global.h" #include "gba/gba.h" #include "multiboot.h" @@ -435,23 +436,23 @@ static int MultiBootHandShake(struct MultiBootParam *mp) #undef must_data } -static NOINLINE void MultiBootWaitCycles(u32 cycles) +NAKED +static void MultiBootWaitCycles(u32 cycles) { - asm("mov r2, pc"); - asm("lsr r2, #24"); - asm("mov r1, #12"); - asm("cmp r2, #0x02"); - asm("beq MultiBootWaitCyclesLoop"); - - asm("mov r1, #13"); - asm("cmp r2, #0x08"); - asm("beq MultiBootWaitCyclesLoop"); - - asm("mov r1, #4"); - - asm("MultiBootWaitCyclesLoop:"); - asm("sub r0, r1"); - asm("bgt MultiBootWaitCyclesLoop"); + asm_unified("\ + mov r2, pc\n\ + lsrs r2, 24\n\ + movs r1, 12\n\ + cmp r2, 2\n\ + beq MultiBootWaitCyclesLoop\n\ + movs r1, 13\n\ + cmp r2, 8\n\ + beq MultiBootWaitCyclesLoop\n\ + movs r1, 4\n\ +MultiBootWaitCyclesLoop:\n\ + subs r0, r1\n\ + bgt MultiBootWaitCyclesLoop\n\ + bx lr\n"); } static void MultiBootWaitSendDone(void) diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index 76f340c605..beb1bf45d5 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -9,7 +9,6 @@ #include "pokemon.h" #include "pokemon_size_record.h" #include "script.h" -#include "constants/species.h" #include "strings.h" #include "string_util.h" #include "text.h" diff --git a/src/overworld.c b/src/overworld.c index 1a5d452b16..ff43a4bc08 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -65,7 +65,6 @@ #include "constants/maps.h" #include "constants/region_map_sections.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainer_hill.h" #include "constants/weather.h" @@ -2913,7 +2912,14 @@ static void ZeroObjectEvent(struct ObjectEvent *objEvent) memset(objEvent, 0, sizeof(struct ObjectEvent)); } -static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4) +// Note: Emerald reuses the direction and range variables during Link mode +// as special gender and direction values. The types and placement +// conflict with the usual Event Object struct, thus the definitions. +#define linkGender(obj) obj->singleMovementActive +// not even one can reference *byte* aligned bitfield members... +#define linkDirection(obj) ((u8*)obj)[offsetof(typeof(*obj), fieldEffectSpriteId) - 1] // -> rangeX + +static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 gender) { u8 objEventId = GetFirstInactiveObjectEventId(); struct LinkPlayerObjectEvent *linkPlayerObjEvent = &gLinkPlayerObjectEvents[linkPlayerId]; @@ -2928,8 +2934,8 @@ static void SpawnLinkPlayerObjectEvent(u8 linkPlayerId, s16 x, s16 y, u8 a4) linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FREE; objEvent->active = 1; - objEvent->singleMovementActive = a4; - objEvent->range.as_byte = 2; + linkGender(objEvent) = gender; + linkDirection(objEvent) = DIR_NORTH; objEvent->spriteId = 64; InitLinkPlayerObjectEventPos(objEvent, x, y); @@ -2946,13 +2952,13 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1 ObjectEventUpdateZCoord(objEvent); } -static void sub_80877DC(u8 linkPlayerId, u8 a2) +static void sub_80877DC(u8 linkPlayerId, u8 dir) { if (gLinkPlayerObjectEvents[linkPlayerId].active) { u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId; struct ObjectEvent *objEvent = &gObjectEvents[objEventId]; - objEvent->range.as_byte = a2; + linkDirection(objEvent) = dir; } } @@ -2987,7 +2993,7 @@ static u8 GetLinkPlayerFacingDirection(u8 linkPlayerId) { u8 objEventId = gLinkPlayerObjectEvents[linkPlayerId].objEventId; struct ObjectEvent *objEvent = &gObjectEvents[objEventId]; - return objEvent->range.as_byte; + return linkDirection(objEvent); } static u8 GetLinkPlayerElevation(u8 linkPlayerId) @@ -3072,10 +3078,10 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer { s16 x, y; - objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte); - ObjectEventMoveDestCoords(objEvent, objEvent->range.as_byte, &x, &y); + linkDirection(objEvent) = FlipVerticalAndClearForced(a3, linkDirection(objEvent)); + ObjectEventMoveDestCoords(objEvent, linkDirection(objEvent), &x, &y); - if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, objEvent->range.as_byte, x, y)) + if (LinkPlayerDetectCollision(linkPlayerObjEvent->objEventId, linkDirection(objEvent), x, y)) { return FALSE; } @@ -3090,7 +3096,7 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer static bool8 FacingHandler_ForcedFacingChange(struct LinkPlayerObjectEvent *linkPlayerObjEvent, struct ObjectEvent *objEvent, u8 a3) { - objEvent->range.as_byte = FlipVerticalAndClearForced(a3, objEvent->range.as_byte); + linkDirection(objEvent) = FlipVerticalAndClearForced(a3, linkDirection(objEvent)); return FALSE; } @@ -3104,7 +3110,7 @@ static void MovementStatusHandler_TryAdvanceScript(struct LinkPlayerObjectEvent { objEvent->directionSequenceIndex--; linkPlayerObjEvent->movementMode = MOVEMENT_MODE_FROZEN; - MoveCoords(objEvent->range.as_byte, &objEvent->initialCoords.x, &objEvent->initialCoords.y); + MoveCoords(linkDirection(objEvent), &objEvent->initialCoords.x, &objEvent->initialCoords.y); if (!objEvent->directionSequenceIndex) { ShiftStillObjectEventCoords(objEvent); @@ -3165,14 +3171,14 @@ static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion) { case VERSION_FIRE_RED: case VERSION_LEAF_GREEN: - objEvent->spriteId = AddPseudoObjectEvent(GetFRLGAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = AddPseudoObjectEvent(GetFRLGAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; case VERSION_RUBY: case VERSION_SAPPHIRE: - objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = AddPseudoObjectEvent(GetRSAvatarGraphicsIdByGender(linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; case VERSION_EMERALD: - objEvent->spriteId = AddPseudoObjectEvent(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, objEvent->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); + objEvent->spriteId = AddPseudoObjectEvent(GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, linkGender(objEvent)), SpriteCB_LinkPlayer, 0, 0, 0); break; } @@ -3193,9 +3199,9 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) sprite->oam.priority = ZCoordToPriority(objEvent->previousElevation); if (linkPlayerObjEvent->movementMode == MOVEMENT_MODE_FREE) - StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objEvent->range.as_byte)); + StartSpriteAnim(sprite, GetFaceDirectionAnimNum(linkDirection(objEvent))); else - StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(objEvent->range.as_byte)); + StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(linkDirection(objEvent))); UpdateObjectEventSpriteVisibility(sprite, 0); if (objEvent->triggerGroundEffectsOnMove) diff --git a/src/party_menu.c b/src/party_menu.c index e509ef6e09..74a23cc939 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -74,7 +74,6 @@ #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #define PARTY_PAL_SELECTED (1 << 0) #define PARTY_PAL_FAINTED (1 << 1) @@ -1222,16 +1221,16 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) } else { - switch (gPartyMenu.action - 3) + switch (gPartyMenu.action) { - case PARTY_ACTION_SOFTBOILED - 3: + case PARTY_ACTION_SOFTBOILED: if (IsSelectedMonNotEgg((u8*)slotPtr)) { PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); Task_TryUseSoftboiledOnPartyMon(taskId); } break; - case PARTY_ACTION_USE_ITEM - 3: + case PARTY_ACTION_USE_ITEM: if (IsSelectedMonNotEgg((u8*)slotPtr)) { if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) @@ -1241,7 +1240,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) gItemUseCB(taskId, Task_ClosePartyMenuAfterText); } break; - case PARTY_ACTION_MOVE_TUTOR - 3: + case PARTY_ACTION_MOVE_TUTOR: if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); @@ -1249,7 +1248,7 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) TryTutorSelectedMon(taskId); } break; - case PARTY_ACTION_GIVE_MAILBOX_MAIL - 3: + case PARTY_ACTION_GIVE_MAILBOX_MAIL: if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); @@ -1257,8 +1256,8 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) TryGiveMailToSelectedMon(taskId); } break; - case PARTY_ACTION_GIVE_ITEM - 3: - case PARTY_ACTION_GIVE_PC_ITEM - 3: + case PARTY_ACTION_GIVE_ITEM: + case PARTY_ACTION_GIVE_PC_ITEM: if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); @@ -1266,23 +1265,23 @@ static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) TryGiveItemOrMailToSelectedMon(taskId); } break; - case PARTY_ACTION_SWITCH - 3: + case PARTY_ACTION_SWITCH: PlaySE(SE_SELECT); SwitchSelectedMons(taskId); break; - case PARTY_ACTION_CHOOSE_AND_CLOSE - 3: + case PARTY_ACTION_CHOOSE_AND_CLOSE: PlaySE(SE_SELECT); Task_ClosePartyMenu(taskId); break; - case PARTY_ACTION_MINIGAME - 3: + case PARTY_ACTION_MINIGAME: if (IsSelectedMonNotEgg((u8*)slotPtr)) { TryEnterMonForMinigame(taskId, (u8)*slotPtr); } break; default: - case PARTY_ACTION_ABILITY_PREVENTS - 3: - case PARTY_ACTION_SWITCHING - 3: + case PARTY_ACTION_ABILITY_PREVENTS: + case PARTY_ACTION_SWITCHING: PlaySE(SE_SELECT); Task_TryCreateSelectionWindow(taskId); break; @@ -1862,7 +1861,7 @@ u8 GetMonAilment(struct Pokemon *mon) static void SetPartyMonsAllowedInMinigame(void) { - s16 *ptr; + u16 *ptr; if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) { @@ -1964,19 +1963,17 @@ static u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor) if (item >= ITEM_TM01_FOCUS_PUNCH) { - if (CanMonLearnTMHM(mon, item - ITEM_TM01_FOCUS_PUNCH)) - move = ItemIdToBattleMoveId(item); - else + if (!CanMonLearnTMHM(mon, item - ITEM_TM01_FOCUS_PUNCH)) return CANNOT_LEARN_MOVE; - do {} while (0); // :morphon: - } - else if (CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor) == FALSE) - { - return CANNOT_LEARN_MOVE; + else + move = ItemIdToBattleMoveId(item); } else { - move = GetTutorMove(tutor); + if (!CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor)) + return CANNOT_LEARN_MOVE; + else + move = GetTutorMove(tutor); } if (MonKnowsMove(mon, move) == TRUE) @@ -4326,9 +4323,13 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) u16 hp = 0; struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = gSpecialVar_ItemId; - bool8 canHeal; + bool8 canHeal, cannotUse; - if (NotUsingHPEVItemOnShedinja(mon, item)) + if (NotUsingHPEVItemOnShedinja(mon, item) == FALSE) + { + cannotUse = TRUE; + } + else { canHeal = IsHPRecoveryItem(item); if (canHeal == TRUE) @@ -4337,51 +4338,50 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (hp == GetMonData(mon, MON_DATA_MAX_HP)) canHeal = FALSE; } - if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0)) - { - iTriedHonestlyIDid: - gPartyMenuUseExitCallback = FALSE; - PlaySE(SE_SELECT); - DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); - ScheduleBgCopyTilemapToVram(2); - gTasks[taskId].func = task; - return; - } + cannotUse = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0); } - else + + if (cannotUse != FALSE) { - goto iTriedHonestlyIDid; //TODO: resolve this goto - } - gPartyMenuUseExitCallback = TRUE; - if (!IsItemFlute(item)) - { - PlaySE(SE_USE_ITEM); - if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM) - RemoveBagItem(item, 1); - } - else - { - PlaySE(SE_GLASS_FLUTE); - } - SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); - if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible) - DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1); - if (canHeal == TRUE) - { - if (hp == 0) - AnimatePartySlot(gPartyMenu.slotId, 1); - PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage); - ResetHPTaskData(taskId, 0, hp); - return; - } - else - { - GetMonNickname(mon, gStringVar1); - GetMedicineItemEffectMessage(item); - DisplayPartyMenuMessage(gStringVar4, TRUE); + gPartyMenuUseExitCallback = FALSE; + PlaySE(SE_SELECT); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); ScheduleBgCopyTilemapToVram(2); gTasks[taskId].func = task; } + else + { + gPartyMenuUseExitCallback = TRUE; + if (!IsItemFlute(item)) + { + PlaySE(SE_USE_ITEM); + if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM) + RemoveBagItem(item, 1); + } + else + { + PlaySE(SE_GLASS_FLUTE); + } + SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); + if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible) + DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + if (canHeal == TRUE) + { + if (hp == 0) + AnimatePartySlot(gPartyMenu.slotId, 1); + PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage); + ResetHPTaskData(taskId, 0, hp); + return; + } + else + { + GetMonNickname(mon, gStringVar1); + GetMedicineItemEffectMessage(item); + DisplayPartyMenuMessage(gStringVar4, TRUE); + ScheduleBgCopyTilemapToVram(2); + gTasks[taskId].func = task; + } + } } static void Task_DisplayHPRestoredMessage(u8 taskId) @@ -4951,9 +4951,9 @@ static void Task_DisplayLevelUpStatsPg2(u8 taskId) static void DisplayLevelUpStatsPg1(u8 taskId) { - u16 *arrayPtr = (u16*)sPartyMenuInternal->data; + s16 *arrayPtr = sPartyMenuInternal->data; - arrayPtr[12] = (u16)CreateLevelUpStatsWindow(); + arrayPtr[12] = CreateLevelUpStatsWindow(); DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(arrayPtr[12], 2); ScheduleBgCopyTilemapToVram(2); @@ -4961,7 +4961,7 @@ static void DisplayLevelUpStatsPg1(u8 taskId) static void DisplayLevelUpStatsPg2(u8 taskId) { - u16 *arrayPtr = (u16 *)sPartyMenuInternal->data; + s16 *arrayPtr = sPartyMenuInternal->data; DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); CopyWindowToVram(arrayPtr[12], 2); diff --git a/src/player_pc.c b/src/player_pc.c index 238424ee33..928aac706c 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -327,7 +327,7 @@ void PlayerPC(void) static void InitPlayerPCMenu(u8 taskId) { - s16 *data; + u16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -346,7 +346,7 @@ static void InitPlayerPCMenu(u8 taskId) static void PlayerPCProcessMenuInput(u8 taskId) { - s16 *data; + u16 *data; s8 inputOptionId; data = gTasks[taskId].data; @@ -435,7 +435,7 @@ static void PlayerPC_TurnOff(u8 taskId) static void InitItemStorageMenu(u8 taskId, u8 var) { - s16 *data; + u16 *data; struct WindowTemplate windowTemplate; data = gTasks[taskId].data; @@ -548,7 +548,7 @@ static void ItemStorage_Toss(u8 taskId) static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss) { - s16 *data = gTasks[taskId].data; + u16 *data = gTasks[taskId].data; data[3] = toss; sub_816B4DC(taskId); @@ -581,9 +581,9 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId) static void sub_816B4DC(u8 taskId) { - u16 *data = (u16 *)gTasks[taskId].data; + u16 *data = gTasks[taskId].data; - ClearStdWindowAndFrameToTransparent((u8)data[4], FALSE); + ClearStdWindowAndFrameToTransparent(data[4], FALSE); ClearWindowTilemap(data[4]); RemoveWindow(data[4]); ScheduleBgCopyTilemapToVram(0); @@ -1380,7 +1380,7 @@ static void ItemStorage_DoItemToss(u8 taskId) data = gTasks[taskId].data; b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove); - if (ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId) == 0) + if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId)) { CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3); diff --git a/src/pokeball.c b/src/pokeball.c index b176677bd3..916c86287f 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -13,7 +13,6 @@ #include "trig.h" #include "util.h" #include "constants/songs.h" -#include "constants/species.h" extern struct MusicPlayerInfo gMPlayInfo_BGM; @@ -1134,6 +1133,11 @@ static void sub_80767D4(struct Sprite *sprite) AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6); sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5); sprite->callback = sub_807687C; +#ifdef BUGFIX + // FIX: If this is used on a sprite that has previously had an affine animation, it will not + // play the shrink anim properly due to being paused. Works together with the fix to `sub_817F77C`. + gSprites[r7].affineAnimPaused = FALSE; +#endif // BUGFIX StartSpriteAffineAnim(&gSprites[r7], 2); AnimateSprite(&gSprites[r7]); gSprites[r7].data[1] = 0; diff --git a/src/pokeblock.c b/src/pokeblock.c index b44112b886..0bfb10632a 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -430,7 +430,7 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate = // code void OpenPokeblockCase(u8 caseId, void (*callback)(void)) { - sPokeblockMenu = Alloc(sizeof(struct PokeblockMenuStruct)); + sPokeblockMenu = Alloc(sizeof(*sPokeblockMenu)); sPokeblockMenu->caseId = caseId; sPokeblockMenu->callbackOnUse = NULL; sPokeblockMenu->unkTaskId = 0xFF; diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 797771f800..32db6c717e 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -646,7 +646,7 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon) case 0: species = GetMonData(mon, MON_DATA_SPECIES2); personality = GetMonData(mon, MON_DATA_PERSONALITY); - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); sPokeblockFeed->loadGfxState++; break; case 1: diff --git a/src/pokedex.c b/src/pokedex.c index d375a0afc7..6aa3479940 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -28,7 +28,6 @@ #include "window.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" enum { @@ -172,16 +171,16 @@ struct PokedexView u16 ownCount; u16 monSpriteIds[MAX_MONS_ON_SCREEN]; u16 selectedMonSpriteId; - s16 pokeBallRotationStep; - s16 pokeBallRotationBackup; + u16 pokeBallRotationStep; + u16 pokeBallRotationBackup; u8 pokeBallRotation; u8 initialVOffset; u8 scrollTimer; u8 scrollDirection; s16 listVOffset; s16 listMovingVOffset; - s16 scrollMonIncrement; - s16 maxScrollTimer; + u16 scrollMonIncrement; + u16 maxScrollTimer; u16 scrollSpeed; u16 unkArr1[4]; // Cleared, never read u8 filler[8]; @@ -2598,7 +2597,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(1, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if (JOY_HELD(DPAD_DOWN) && (selectedMon < sPokedexView->pokemonListCount - 1)) + else if ((JOY_HELD(DPAD_DOWN)) && (selectedMon < sPokedexView->pokemonListCount - 1)) { scrollDir = 2; selectedMon = GetNextPosition(0, selectedMon, 0, sPokedexView->pokemonListCount - 1); @@ -2606,7 +2605,7 @@ static u16 TryDoPokedexScroll(u16 selectedMon, u16 ignored) CreateMonListEntry(2, selectedMon, ignored); PlaySE(SE_DEX_SCROLL); } - else if (JOY_NEW(DPAD_LEFT) && (selectedMon > 0)) + else if ((JOY_NEW(DPAD_LEFT)) && (selectedMon > 0)) { startingPos = selectedMon; @@ -3038,7 +3037,15 @@ static void SpriteCB_PokedexListMonSprite(struct Sprite *sprite) u32 var; sprite->pos2.y = gSineTable[(u8)sprite->data[5]] * 76 / 256; + // UB: possible division by zero +#ifdef UBFIX + if (gSineTable[sprite->data[5] + 64] != 0) + var = 0x10000 / gSineTable[sprite->data[5] + 64]; + else + var = 0; +#else var = 0x10000 / gSineTable[sprite->data[5] + 64]; +#endif //UBFIX if (var > 0xFFFF) var = 0xFFFF; SetOamMatrix(sprite->data[1] + 1, 0x100, 0, 0, var); @@ -3400,8 +3407,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) } return; } - if ((JOY_NEW(DPAD_LEFT) - || (JOY_NEW(L_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (((JOY_NEW(DPAD_LEFT)) + || ((JOY_NEW(L_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen > 0) { sPokedexView->selectedScreen--; @@ -3409,8 +3416,8 @@ static void Task_HandleInfoScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if ((JOY_NEW(DPAD_RIGHT) - || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if (((JOY_NEW(DPAD_RIGHT)) + || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) && sPokedexView->selectedScreen < CANCEL_SCREEN) { sPokedexView->selectedScreen++; @@ -3657,8 +3664,8 @@ static void Task_HandleCryScreenInput(u8 taskId) PlaySE(SE_DEX_PAGE); return; } - if (JOY_NEW(DPAD_RIGHT) - || (JOY_NEW(R_BUTTON) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + if ((JOY_NEW(DPAD_RIGHT)) + || ((JOY_NEW(R_BUTTON)) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { if (!sPokedexListItem->owned) { @@ -4168,13 +4175,12 @@ static void PrintMonHeight(u16 height, u8 left, u8 top) static void PrintMonWeight(u16 weight, u8 left, u8 top) { u8 buffer[16]; - u8 i; bool8 output; + u8 i; u32 lbs = (weight * 100000) / 4536; if (lbs % 10u >= 5) lbs += 10; - i = 0; output = FALSE; @@ -4229,19 +4235,13 @@ const u8 *GetPokedexCategoryName(u16 dexNum) // unused return gPokedexEntries[dexNum].categoryName; } -enum -{ - HEIGHT, - WEIGHT, -}; - u16 GetPokedexHeightWeight(u16 dexNum, u8 data) { switch (data) { - case HEIGHT: + case 0: // height return gPokedexEntries[dexNum].height; - case WEIGHT: + case 1: // weight return gPokedexEntries[dexNum].weight; default: return 1; @@ -5030,7 +5030,7 @@ static void Task_HandleSearchMenuInput(u8 taskId) CopyWindowToVram(0, 2); CopyBgTilemapBufferToVram(3); } - if (JOY_NEW(DPAD_RIGHT) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) + if ((JOY_NEW(DPAD_RIGHT)) && movementMap[gTasks[taskId].tMenuItem][1] != 0xFF) { PlaySE(SE_SELECT); gTasks[taskId].tMenuItem = movementMap[gTasks[taskId].tMenuItem][1]; @@ -5116,9 +5116,9 @@ static void Task_SelectSearchMenuItem(u8 taskId) u16 *scrollOffset; DrawOrEraseSearchParameterBox(FALSE); - menuItem = (u16)gTasks[taskId].tMenuItem; - cursorPos = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; - scrollOffset = (u16*)&gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; + menuItem = gTasks[taskId].tMenuItem; + cursorPos = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataCursorPos]; + scrollOffset = &gTasks[taskId].data[sSearchOptions[menuItem].taskDataScrollOffset]; gTasks[taskId].tCursorPos = *cursorPos; gTasks[taskId].tScrollOffset = *scrollOffset; PrintSearchParameterText(taskId); @@ -5237,8 +5237,9 @@ static void Task_ExitSearchWaitForFade(u8 taskId) void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width) { - u16 i, temp; //This would have been better as a pointer but here we are - u32 ptr = (u32)GetBgTilemapBuffer(3); //This should be a pointer, but this only matches as a u32. + u16 i; + u16 temp; //should be a pointer, but does not match as one + u32 ptr = (u32)GetBgTilemapBuffer(3); //same as above for (i = 0; i < width; i++) { @@ -5246,7 +5247,7 @@ void SetSearchRectHighlight(u8 flags, u8 x, u8 y, u8 width) temp &= 0x0fff; temp |= (flags << 12); *(u16 *)(ptr + (y + 0) * 64 + (x + i) * 2) = temp; - + temp = *(u16 *)(ptr + (y + 1) * 64 + (x + i) * 2); temp &= 0x0fff; temp |= (flags << 12); @@ -5452,8 +5453,8 @@ static void PrintSearchParameterText(u8 taskId) const struct SearchOptionText *texts = sSearchOptions[gTasks[taskId].tMenuItem].texts; const u16 *cursorPos = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataCursorPos]; const u16 *scrollOffset = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].tMenuItem].taskDataScrollOffset]; - - u16 i, j; + u16 i; + u16 j; ClearSearchParameterBoxText(); @@ -5542,7 +5543,8 @@ static bool8 SearchParamCantScrollUp(u8 taskId) if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset != 0) return FALSE; - return TRUE; + else + return TRUE; } static bool8 SearchParamCantScrollDown(u8 taskId) @@ -5553,7 +5555,8 @@ static bool8 SearchParamCantScrollDown(u8 taskId) if (lastOption > MAX_SEARCH_PARAM_CURSOR_POS && *scrollOffset < lastOption - MAX_SEARCH_PARAM_CURSOR_POS) return FALSE; - return TRUE; + else + return TRUE; } #define sTaskId data[0] diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index fdbd2f40c5..7a3b38dc2a 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -20,7 +20,6 @@ #include "constants/region_map_sections.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" #define AREA_SCREEN_WIDTH 32 #define AREA_SCREEN_HEIGHT 20 diff --git a/src/pokemon.c b/src/pokemon.c index 30f0b0e73b..b9264c4c2c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -44,7 +44,6 @@ #include "constants/layouts.h" #include "constants/moves.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" struct SpeciesItem @@ -58,7 +57,7 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon); static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 personality, u8 substructType); static void EncryptBoxMon(struct BoxPokemon *boxMon); static void DecryptBoxMon(struct BoxPokemon *boxMon); -static void sub_806E6CC(u8 taskId); +static void Task_PlayMapChosenOrBattleBGM(u8 taskId); static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); static bool8 ShouldSkipFriendshipChange(void); @@ -70,7 +69,7 @@ EWRAM_DATA u8 gEnemyPartyCount = 0; EWRAM_DATA struct Pokemon gPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0}; EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0}; -EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL, NULL}; +EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL}; // const rom data #include "data/battle_moves.h" @@ -2248,7 +2247,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_POKEBALL, &value); SetBoxMonData(boxMon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender); - if (fixedIV < 32) + if (fixedIV < USE_RANDOM_IVS) { SetBoxMonData(boxMon, MON_DATA_HP_IV, &fixedIV); SetBoxMonData(boxMon, MON_DATA_ATK_IV, &fixedIV); @@ -2262,20 +2261,20 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u32 iv; value = Random(); - iv = value & 0x1F; + iv = value & MAX_IV_MASK; SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); - iv = (value & 0x3E0) >> 5; + iv = (value & (MAX_IV_MASK << 5)) >> 5; SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); - iv = (value & 0x7C00) >> 10; + iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); value = Random(); - iv = value & 0x1F; + iv = value & MAX_IV_MASK; SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); - iv = (value & 0x3E0) >> 5; + iv = (value & (MAX_IV_MASK << 5)) >> 5; SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); - iv = (value & 0x7C00) >> 10; + iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); } @@ -2343,7 +2342,7 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level) personality = Random32(); } while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE); - CreateMon(mon, species, level, 32, 1, personality, OT_ID_PRESET, otId); + CreateMon(mon, species, level, USE_RANDOM_IVS, 1, personality, OT_ID_PRESET, otId); } void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality) @@ -2525,7 +2524,7 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m CreateMon(mon, src->party[monId].species, GetFrontierEnemyMonLevel(src->lvlMode - 1), - 0x1F, + MAX_PER_STAT_IVS, TRUE, personality, OT_ID_PRESET, @@ -2579,7 +2578,7 @@ void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, CalculateMonStats(mon); } -void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest) +void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest) { s32 i; u16 heldItem; @@ -2588,7 +2587,7 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest) heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); if (heldItem == ITEM_ENIGMA_BERRY) - heldItem = 0; + heldItem = ITEM_NONE; dest->heldItem = heldItem; @@ -2762,7 +2761,7 @@ void CreateObedientEnemyMon(void) s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateObedientMon(&gEnemyParty[0], species, level, 32, 0, 0, 0, 0); + CreateObedientMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, 0, 0); if (itemId) { u8 heldItem[2]; @@ -2837,9 +2836,9 @@ void CalculateMonStats(struct Pokemon *mon) newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10; } - gBattleScripting.field_23 = newMaxHP - oldMaxHP; - if (gBattleScripting.field_23 == 0) - gBattleScripting.field_23 = 1; + gBattleScripting.levelUpHP = newMaxHP - oldMaxHP; + if (gBattleScripting.levelUpHP == 0) + gBattleScripting.levelUpHP = 1; SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP); @@ -2860,10 +2859,14 @@ void CalculateMonStats(struct Pokemon *mon) { if (currentHP == 0 && oldMaxHP == 0) currentHP = newMaxHP; - else if (currentHP != 0) + else if (currentHP != 0) { // BUG: currentHP is unintentionally able to become <= 0 after the instruction below. This causes the pomeg berry glitch. - // To fix that set currentHP = 1 if currentHP <= 0. currentHP += newMaxHP - oldMaxHP; + #ifdef BUGFIX + if (currentHP <= 0) + currentHP = 1; + #endif + } else return; } @@ -4312,12 +4315,12 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_IVS: { u32 ivs = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); - substruct3->hpIV = ivs & 0x1F; - substruct3->attackIV = (ivs >> 5) & 0x1F; - substruct3->defenseIV = (ivs >> 10) & 0x1F; - substruct3->speedIV = (ivs >> 15) & 0x1F; - substruct3->spAttackIV = (ivs >> 20) & 0x1F; - substruct3->spDefenseIV = (ivs >> 25) & 0x1F; + substruct3->hpIV = ivs & MAX_IV_MASK; + substruct3->attackIV = (ivs >> 5) & MAX_IV_MASK; + substruct3->defenseIV = (ivs >> 10) & MAX_IV_MASK; + substruct3->speedIV = (ivs >> 15) & MAX_IV_MASK; + substruct3->spAttackIV = (ivs >> 20) & MAX_IV_MASK; + substruct3->spDefenseIV = (ivs >> 25) & MAX_IV_MASK; break; } default: @@ -4913,19 +4916,21 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; } } + + // Get amount of HP to restore dataUnsigned = itemEffect[var_3C++]; switch (dataUnsigned) { - case 0xFF: + case ITEM6_HEAL_FULL: dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) - GetMonData(mon, MON_DATA_HP, NULL); break; - case 0xFE: + case ITEM6_HEAL_HALF: dataUnsigned = GetMonData(mon, MON_DATA_MAX_HP, NULL) / 2; if (dataUnsigned == 0) dataUnsigned = 1; break; - case 0xFD: - dataUnsigned = gBattleScripting.field_23; + case ITEM6_HEAL_LVL_UP: + dataUnsigned = gBattleScripting.levelUpHP; break; } if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL)) @@ -5593,8 +5598,8 @@ u16 SpeciesToCryId(u16 species) void sub_806D544(u16 species, u32 personality, u8 *dest) { if (species == SPECIES_SPINDA - && dest != gMonSpritesGfxPtr->sprites[0] - && dest != gMonSpritesGfxPtr->sprites[2]) + && dest != gMonSpritesGfxPtr->sprites.ptr[0] + && dest != gMonSpritesGfxPtr->sprites.ptr[2]) { int i; for (i = 0; i < 4; i++) @@ -5749,7 +5754,7 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) { u16 retVal; - // Dont modify HP, Accuracy, or Evasion by nature + // Don't modify HP, Accuracy, or Evasion by nature if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS) { return n; @@ -6330,26 +6335,31 @@ void PlayMapChosenOrBattleBGM(u16 songId) PlayNewMapMusic(GetBattleBGM()); } -void sub_806E694(u16 songId) +// Identical to PlayMapChosenOrBattleBGM, but uses a task instead +// Only used by Battle Dome +#define tSongId data[0] +void CreateTask_PlayMapChosenOrBattleBGM(u16 songId) { u8 taskId; ResetMapMusic(); m4aMPlayAllStop(); - taskId = CreateTask(sub_806E6CC, 0); - gTasks[taskId].data[0] = songId; + taskId = CreateTask(Task_PlayMapChosenOrBattleBGM, 0); + gTasks[taskId].tSongId = songId; } -static void sub_806E6CC(u8 taskId) +static void Task_PlayMapChosenOrBattleBGM(u8 taskId) { - if (gTasks[taskId].data[0]) - PlayNewMapMusic(gTasks[taskId].data[0]); + if (gTasks[taskId].tSongId) + PlayNewMapMusic(gTasks[taskId].tSongId); else PlayNewMapMusic(GetBattleBGM()); DestroyTask(taskId); } +#undef tSongId + const u32 *GetMonFrontSpritePal(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); @@ -6810,8 +6820,6 @@ static bool8 ShouldSkipFriendshipChange(void) return FALSE; } -#define MAGIC_NUMBER 0xA3 - static void sub_806F160(struct Unknown_806F160_Struct* structPtr) { u16 i, j; @@ -6860,7 +6868,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) structPtr->field_0_0 = 7; structPtr->field_0_1 = 7; structPtr->field_1 = 4; - structPtr->size = 1; + structPtr->field_3_0 = 1; structPtr->field_3_1 = 2; break; case 0: @@ -6868,12 +6876,12 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) structPtr->field_0_0 = 4; structPtr->field_0_1 = 4; structPtr->field_1 = 4; - structPtr->size = 1; + structPtr->field_3_0 = 1; structPtr->field_3_1 = 0; break; } - structPtr->bytes = AllocZeroed(structPtr->size * 0x800 * 4 * structPtr->field_0_0); + structPtr->bytes = AllocZeroed(structPtr->field_3_0 * 0x800 * 4 * structPtr->field_0_0); structPtr->byteArrays = AllocZeroed(structPtr->field_0_0 * 32); if (structPtr->bytes == NULL || structPtr->byteArrays == NULL) { @@ -6882,7 +6890,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) else { for (i = 0; i < structPtr->field_0_0; i++) - structPtr->byteArrays[i] = structPtr->bytes + (structPtr->size * (i << 0xD)); + structPtr->byteArrays[i] = structPtr->bytes + (structPtr->field_3_0 * (i << 0xD)); } structPtr->templates = AllocZeroed(sizeof(struct SpriteTemplate) * structPtr->field_0_0); @@ -6901,8 +6909,8 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) case 2: sub_806F1FC(structPtr); break; - case 1: case 0: + case 1: default: sub_806F160(structPtr); break; @@ -6931,7 +6939,7 @@ struct Unknown_806F160_Struct *sub_806F2AC(u8 id, u8 arg1) } else { - structPtr->magic = MAGIC_NUMBER; + structPtr->magic = 0xA3; gUnknown_020249B4[id] = structPtr; } @@ -6942,12 +6950,12 @@ void sub_806F47C(u8 id) { struct Unknown_806F160_Struct *structPtr; - id &= 1; + id %= 2; structPtr = gUnknown_020249B4[id]; if (structPtr == NULL) return; - if (structPtr->magic != MAGIC_NUMBER) + if (structPtr->magic != 0xA3) { memset(structPtr, 0, sizeof(struct Unknown_806F160_Struct)); } @@ -6971,13 +6979,15 @@ void sub_806F47C(u8 id) u8 *sub_806F4F8(u8 id, u8 arg1) { struct Unknown_806F160_Struct *structPtr = gUnknown_020249B4[id % 2]; - if (structPtr->magic != MAGIC_NUMBER) + if (structPtr->magic != 0xA3) { return NULL; } - - if (arg1 >= structPtr->field_0_0) - arg1 = 0; + else + { + if (arg1 >= structPtr->field_0_0) + arg1 = 0; - return structPtr->byteArrays[arg1]; + return structPtr->byteArrays[arg1]; + } } diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index e63a2cef1d..9c8eaca9ad 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -6,9 +6,9 @@ #include "task.h" #include "trig.h" #include "util.h" +#include "data.h" #include "constants/battle_anim.h" #include "constants/rgb.h" -#include "constants/species.h" struct UnkAnimStruct { @@ -1042,6 +1042,14 @@ static void sub_817F77C(struct Sprite *sprite) sprite->oam.matrixNum |= (sprite->hFlip << 3); sprite->oam.affineMode = ST_OAM_AFFINE_OFF; } +#ifdef BUGFIX + else + { + // FIX: Reset these back to normal after they were changed so Poké Ball catch/release + // animations without a screen transition in between don't break + sprite->affineAnims = gUnknown_082FF694; + } +#endif // BUGFIX } static void pokemonanimfunc_01(struct Sprite *sprite) @@ -2884,10 +2892,9 @@ static void sub_8181C2C(struct Sprite *sprite) } else { + s32 var = sUnknown_03001240[sprite->data[0]].field_8; - const s16 var = sUnknown_03001240[sprite->data[0]].field_8; - - sprite->pos2.x = var * ((counter % 128) * 8) / 128 + 8 * -var; //Should be - 8 * var instead of + 8 * -var, but that doesn't match + sprite->pos2.x = var * ((counter % 128) * 8) / 128 + 8 * -var; sprite->pos2.y = -(Sin(counter % 128, 8)); } diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 7d8c65d7cb..b85a291514 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -4,7 +4,6 @@ #include "palette.h" #include "pokemon_icon.h" #include "sprite.h" -#include "constants/species.h" #define POKE_ICON_BASE_PAL_TAG 56000 diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 84d869a1ac..914752eb4c 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -29,7 +29,6 @@ #include "pokemon_jump.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" struct PokemonJump1_MonInfo { @@ -406,7 +405,7 @@ void StartPokemonJump(u16 partyIndex, MainCallback callback) if (gReceivedRemoteLinkPlayers) { - gUnknown_02022CFC = Alloc(sizeof(struct PokemonJump1)); + gUnknown_02022CFC = Alloc(sizeof(*gUnknown_02022CFC)); if (gUnknown_02022CFC) { ResetTasks(); diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index 914d689255..f8b3619124 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -6,7 +6,6 @@ #include "pokemon_size_record.h" #include "string_util.h" #include "text.h" -#include "constants/species.h" #define DEFAULT_MAX_SIZE 0x8000 // was 0x8100 in Ruby/Sapphire diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index ae334504e0..4be1cf729f 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -41,7 +41,6 @@ #include "constants/moves.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" struct WallpaperTable { @@ -2157,7 +2156,7 @@ static void Cb2_EnterPSS(u8 boxOption) { ResetTasks(); sCurrentBoxOption = boxOption; - sPSSData = Alloc(sizeof(struct PokemonStorageSystemData)); + sPSSData = Alloc(sizeof(*sPSSData)); if (sPSSData == NULL) { SetMainCallback2(Cb2_ExitPSS); @@ -2177,7 +2176,7 @@ static void Cb2_EnterPSS(u8 boxOption) static void Cb2_ReturnToPSS(void) { ResetTasks(); - sPSSData = Alloc(sizeof(struct PokemonStorageSystemData)); + sPSSData = Alloc(sizeof(*sPSSData)); if (sPSSData == NULL) { SetMainCallback2(Cb2_ExitPSS); @@ -3184,7 +3183,7 @@ static void Cb_ShowMarkMenu(u8 taskId) sPSSData->state++; break; case 1: - if (!sub_811FBA4()) + if (!MonMarkingsMenuHandleInput()) { sub_811FAF8(); ClearBottomWindow(); @@ -6778,11 +6777,11 @@ static void SetCursorMonData(void *pokemon, u8 mode) { u8 *txtPtr; u16 gender; - bool8 sanityIsBagEgg; + bool8 sanityIsBadEgg; sPSSData->cursorMonItem = 0; gender = MON_MALE; - sanityIsBagEgg = FALSE; + sanityIsBadEgg = FALSE; if (mode == MODE_PARTY) { struct Pokemon *mon = (struct Pokemon *)pokemon; @@ -6790,8 +6789,8 @@ static void SetCursorMonData(void *pokemon, u8 mode) sPSSData->cursorMonSpecies = GetMonData(mon, MON_DATA_SPECIES2); if (sPSSData->cursorMonSpecies != SPECIES_NONE) { - sanityIsBagEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); - if (sanityIsBagEgg) + sanityIsBadEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); + if (sanityIsBadEgg) sPSSData->cursorMonIsEgg = TRUE; else sPSSData->cursorMonIsEgg = GetMonData(mon, MON_DATA_IS_EGG); @@ -6814,8 +6813,8 @@ static void SetCursorMonData(void *pokemon, u8 mode) if (sPSSData->cursorMonSpecies != SPECIES_NONE) { u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); - sanityIsBagEgg = GetBoxMonData(boxMon, MON_DATA_SANITY_IS_BAD_EGG); - if (sanityIsBagEgg) + sanityIsBadEgg = GetBoxMonData(boxMon, MON_DATA_SANITY_IS_BAD_EGG); + if (sanityIsBadEgg) sPSSData->cursorMonIsEgg = TRUE; else sPSSData->cursorMonIsEgg = GetBoxMonData(boxMon, MON_DATA_IS_EGG); @@ -6847,7 +6846,7 @@ static void SetCursorMonData(void *pokemon, u8 mode) } else if (sPSSData->cursorMonIsEgg) { - if (sanityIsBagEgg) + if (sanityIsBadEgg) StringCopyPadded(sPSSData->cursorMonNickText, sPSSData->cursorMonNick, CHAR_SPACE, 5); else StringCopyPadded(sPSSData->cursorMonNickText, gText_EggNickname, CHAR_SPACE, 8); @@ -7441,7 +7440,7 @@ static u8 HandleInput_OnButtons(void) sPSSData->field_CD7 = 1; break; } - + if (JOY_REPEAT(DPAD_DOWN | START_BUTTON)) { retVal = 1; @@ -8409,8 +8408,13 @@ static void sub_80D08CC(void) for (j = sMoveMonsPtr->minRow; j < rowCount; j++) { struct BoxPokemon *boxMon = GetBoxedMonPtr(boxId, boxPosition); - + // UB: possible null dereference +#ifdef UBFIX + if (boxMon != NULL) + sMoveMonsPtr->boxMons[monArrayId] = *boxMon; +#else sMoveMonsPtr->boxMons[monArrayId] = *boxMon; +#endif monArrayId++; boxPosition++; } @@ -9330,10 +9334,11 @@ u32 GetBoxMonLevelAt(u8 boxId, u8 boxPosition) { u32 lvl; - // BUG: Missed 'else' statement. if (boxId < TOTAL_BOXES_COUNT && boxPosition < IN_BOX_COUNT && GetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_SANITY_HAS_SPECIES)) lvl = GetLevelFromBoxMonExp(&gPokemonStoragePtr->boxes[boxId][boxPosition]); - // else + #ifdef BUGFIX + else + #endif lvl = 0; return lvl; diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index bfd849229d..fce2a893c5 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -46,7 +46,6 @@ #include "constants/region_map_sections.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" // Screen titles (upper left) #define PSS_LABEL_WINDOW_POKEMON_INFO_TITLE 0 @@ -1505,11 +1504,11 @@ static void Task_HandleInput(u8 taskId) { ChangeSummaryPokemon(taskId, 1); } - else if (JOY_NEW(DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) + else if ((JOY_NEW(DPAD_LEFT)) || GetLRKeysPressed() == MENU_L_PRESSED) { ChangePage(taskId, -1); } - else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) + else if ((JOY_NEW(DPAD_RIGHT)) || GetLRKeysPressed() == MENU_R_PRESSED) { ChangePage(taskId, 1); } @@ -2579,7 +2578,7 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo ScheduleBgCopyTilemapToVram(3); } -static void SetDexNumberColor(bool8 isMonShiny) +static void SetMonPicBackgroundPalette(bool8 isMonShiny) { if (!isMonShiny) SetBgTilemapPalette(3, 1, 4, 8, 8, 0); @@ -2716,12 +2715,12 @@ static void PrintNotEggInfo(void) if (!IsMonShiny(mon)) { PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 1); - SetDexNumberColor(FALSE); + SetMonPicBackgroundPalette(FALSE); } else { PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 7); - SetDexNumberColor(TRUE); + SetMonPicBackgroundPalette(TRUE); } PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER); } @@ -2729,9 +2728,9 @@ static void PrintNotEggInfo(void) { ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER); if (!IsMonShiny(mon)) - SetDexNumberColor(FALSE); + SetMonPicBackgroundPalette(FALSE); else - SetDexNumberColor(TRUE); + SetMonPicBackgroundPalette(TRUE); } StringCopy(gStringVar1, gText_LevelSymbol); ConvertIntToDecimalStringN(gStringVar2, summary->level, STR_CONV_MODE_LEFT_ALIGN, 3); @@ -3859,18 +3858,18 @@ static u8 LoadMonGfxAndSprite(struct Pokemon *mon, s16 *state) if (gMain.inBattle) { if (sub_80688F8(3, sMonSummaryScreen->curMonIndex)) - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); else - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); } else { if (gMonSpritesGfxPtr != NULL) { if (sMonSummaryScreen->monList.mons == gPlayerParty || sMonSummaryScreen->mode == PSS_MODE_BOX || sMonSummaryScreen->unk40EF == TRUE) - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites.ptr[1], summary->species2, summary->pid); } else { @@ -3977,7 +3976,7 @@ static void StopPokemonAnimations(void) // A subtle effect, this function stops static void CreateMonMarkingsSprite(struct Pokemon *mon) { - struct Sprite *sprite = sub_811FF94(TAG_MON_MARKINGS, TAG_MON_MARKINGS, sSummaryMarkingsPalette); + struct Sprite *sprite = CreateMonMarkingsSpriteWithPal(TAG_MON_MARKINGS, TAG_MON_MARKINGS, sSummaryMarkingsPalette); sMonSummaryScreen->markingsSprite = sprite; if (sprite != NULL) diff --git a/src/pokenav.c b/src/pokenav.c index 30dc001c37..eac0c85b4f 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -14,8 +14,6 @@ #define LOOPED_TASK_PRIMARY_ID(taskId) (taskId & 0xFFFF) #define LOOPED_TASK_SECONDARY_ID(taskId) (taskId >> 16) -#define SUBSTRUCT_COUNT 19 - struct PokenavResources { u32 (*currentMenuCb1)(void); @@ -23,7 +21,7 @@ struct PokenavResources u16 mode; u16 conditionSearchId; bool32 hasAnyRibbons; - void *field10[SUBSTRUCT_COUNT]; + void *substructPtrs[POKENAV_SUBSTRUCT_COUNT]; }; struct PokenavCallbacks @@ -38,7 +36,7 @@ struct PokenavCallbacks }; static u32 GetCurrentMenuCB(void); -static u32 sub_81C75D4(void); +static u32 IsActiveMenuLoopTaskActive_(void); static bool32 SetActivePokenavMenu(u32 menuId); static bool32 AnyMonHasRibbon(void); static void InitPokenavResources(struct PokenavResources *a0); @@ -126,43 +124,43 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = }, [POKENAV_CONDITION_PARTY - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_7, - .callback = sub_81CD070, - .open = sub_81CDDD4, - .createLoopTask = sub_81CDE2C, - .isLoopTaskActive = sub_81CDE64, - .free1 = sub_81CD1C0, - .free2 = sub_81CECA0, + .init = PokenavCallback_Init_PartyCondition, + .callback = GetPartyConditionCallback, + .open = OpenPartyConditionMenu, + .createLoopTask = CreatePartyConditionLoopedTask, + .isLoopTaskActive = IsPartyConditionLoopedTaskActive, + .free1 = FreePartyConditionSubstruct1, + .free2 = FreePartyConditionSubstruct2, }, [POKENAV_CONDITION_SEARCH_RESULTS - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_8, - .callback = sub_81CEFDC, - .open = sub_81CF330, - .createLoopTask = sub_81CF3A0, - .isLoopTaskActive = sub_81CF3D0, - .free1 = sub_81CEFF0, - .free2 = sub_81CF3F8, + .init = PokenavCallback_Init_ConditionSearch, + .callback = GetConditionSearchResultsCallback, + .open = OpenConditionSearchResults, + .createLoopTask = CreateSearchResultsLoopedTask, + .isLoopTaskActive = IsSearchResultLoopedTaskActive, + .free1 = FreeSearchResultSubstruct1, + .free2 = FreeSearchResultSubstruct2, }, - [POKENAV_MENU_9 - POKENAV_MENU_IDS_START] = + [POKENAV_CONDITION_GRAPH_FROM_SEARCH - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_9, - .callback = sub_81CD070, - .open = sub_81CDDD4, - .createLoopTask = sub_81CDE2C, - .isLoopTaskActive = sub_81CDE64, - .free1 = sub_81CD1C0, - .free2 = sub_81CECA0, + .init = PokenavCallback_Init_ConditionGraphFromSearch, + .callback = GetPartyConditionCallback, + .open = OpenPartyConditionMenu, + .createLoopTask = CreatePartyConditionLoopedTask, + .isLoopTaskActive = IsPartyConditionLoopedTaskActive, + .free1 = FreePartyConditionSubstruct1, + .free2 = FreePartyConditionSubstruct2, }, - [POKENAV_MENU_A - POKENAV_MENU_IDS_START] = + [POKENAV_RETURN_CONDITION_SEARCH - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_10, - .callback = sub_81CEFDC, - .open = sub_81CF368, - .createLoopTask = sub_81CF3A0, - .isLoopTaskActive = sub_81CF3D0, - .free1 = sub_81CEFF0, - .free2 = sub_81CF3F8, + .init = PokenavCallback_Init_ReturnToMonSearchList, + .callback = GetConditionSearchResultsCallback, + .open = OpenConditionSearchListFromGraph, + .createLoopTask = CreateSearchResultsLoopedTask, + .isLoopTaskActive = IsSearchResultLoopedTaskActive, + .free1 = FreeSearchResultSubstruct1, + .free2 = FreeSearchResultSubstruct2, }, [POKENAV_MATCH_CALL - POKENAV_MENU_IDS_START] = { @@ -176,33 +174,33 @@ const struct PokenavCallbacks PokenavMenuCallbacks[15] = }, [POKENAV_RIBBONS_MON_LIST - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_12, - .callback = sub_81CFA34, - .open = sub_81CFDD0, - .createLoopTask = sub_81CFE40, - .isLoopTaskActive = sub_81CFE70, - .free1 = sub_81CFA48, - .free2 = sub_81CFE98, + .init = PokenavCallback_Init_MonRibbonList, + .callback = GetRibbonsMonListCallback, + .open = OpenRibbonsMonList, + .createLoopTask = CreateRibbonsMonListLoopedTask, + .isLoopTaskActive = IsRibbonsMonListLoopedTaskActive, + .free1 = FreeRibbonsMonList1, + .free2 = FreeRibbonsMonList2, }, - [POKENAV_MENU_D - POKENAV_MENU_IDS_START] = + [POKENAV_RIBBONS_SUMMARY_SCREEN - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_13, - .callback = sub_81D04A0, - .open = sub_81D0978, - .createLoopTask = sub_81D09B0, - .isLoopTaskActive = sub_81D09E0, - .free1 = sub_81D04B8, - .free2 = sub_81D09F4, + .init = PokenavCallback_Init_RibbonsSummaryMenu, + .callback = GetRibbonsSummaryMenuCallback, + .open = OpenRibbonsSummaryMenu, + .createLoopTask = CreateRibbonsSummaryLoopedTask, + .isLoopTaskActive = IsRibbonsSummaryLoopedTaskActive, + .free1 = FreeRibbonsSummaryScreen1, + .free2 = FreeRibbonsSummaryScreen2, }, - [POKENAV_MENU_E - POKENAV_MENU_IDS_START] = + [POKENAV_RIBBONS_RETURN_TO_MON_LIST - POKENAV_MENU_IDS_START] = { - .init = PokenavCallback_Init_14, - .callback = sub_81CFA34, - .open = sub_81CFE08, - .createLoopTask = sub_81CFE40, - .isLoopTaskActive = sub_81CFE70, - .free1 = sub_81CFA48, - .free2 = sub_81CFE98, + .init = PokenavCallback_Init_RibbonsMonListFromSummary, + .callback = GetRibbonsMonListCallback, + .open = OpenRibbonsMonListFromRibbonsSummary, + .createLoopTask = CreateRibbonsMonListLoopedTask, + .isLoopTaskActive = IsRibbonsMonListLoopedTaskActive, + .free1 = FreeRibbonsMonList1, + .free2 = FreeRibbonsMonList2, }, }; @@ -317,7 +315,7 @@ static void Task_RunLoopedTask_LinkMode(u8 taskId) void CB2_InitPokeNav(void) { - gPokenavResources = Alloc(sizeof(struct PokenavResources)); + gPokenavResources = Alloc(sizeof(*gPokenavResources)); if (gPokenavResources == NULL) { SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); @@ -345,7 +343,7 @@ static void CB2_InitPokenavForTutorial(void) if (gPaletteFade.active) return; - gPokenavResources = Alloc(sizeof(struct PokenavResources)); + gPokenavResources = Alloc(sizeof(*gPokenavResources)); if (gPokenavResources == NULL) { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); @@ -368,24 +366,24 @@ static void FreePokenavResources(void) { int i; - for (i = 0; i < SUBSTRUCT_COUNT; i++) + for (i = 0; i < POKENAV_SUBSTRUCT_COUNT; i++) FreePokenavSubstruct(i); FREE_AND_SET_NULL(gPokenavResources); InitKeys(); } -static void InitPokenavResources(struct PokenavResources *a0) +static void InitPokenavResources(struct PokenavResources *resources) { int i; - for (i = 0; i < SUBSTRUCT_COUNT; i++) - a0->field10[i] = NULL; + for (i = 0; i < POKENAV_SUBSTRUCT_COUNT; i++) + resources->substructPtrs[i] = NULL; - a0->mode = POKENAV_MODE_NORMAL; - a0->currentMenuIndex = 0; - a0->hasAnyRibbons = AnyMonHasRibbon(); - a0->currentMenuCb1 = NULL; + resources->mode = POKENAV_MODE_NORMAL; + resources->currentMenuIndex = 0; + resources->hasAnyRibbons = AnyMonHasRibbon(); + resources->currentMenuCb1 = NULL; } static bool32 AnyMonHasRibbon(void) @@ -453,12 +451,12 @@ static void Task_Pokenav(u8 taskId) tState = 4; break; case 2: - if (sub_81C786C()) + if (IsActiveMenuLoopTaskActive()) break; tState = 3; case 3: menuId = GetCurrentMenuCB(); - if (menuId == -1) + if (menuId == POKENAV_MENU_FUNC_EXIT) { ShutdownPokenav(); tState = 5; @@ -479,13 +477,13 @@ static void Task_Pokenav(u8 taskId) } else if (menuId != 0) { - sub_81C7850(menuId); - if (sub_81C786C()) + RunMainMenuLoopedTask(menuId); + if (IsActiveMenuLoopTaskActive()) tState = 2; } break; case 4: - if (!sub_81C75D4()) + if (!IsActiveMenuLoopTaskActive_()) tState = 3; break; case 5: @@ -516,15 +514,15 @@ static bool32 SetActivePokenavMenu(u32 menuId) if (!PokenavMenuCallbacks[index].open()) return FALSE; - sub_81C7834(PokenavMenuCallbacks[index].createLoopTask, PokenavMenuCallbacks[index].isLoopTaskActive); + SetActiveMenuLoopTasks(PokenavMenuCallbacks[index].createLoopTask, PokenavMenuCallbacks[index].isLoopTaskActive); gPokenavResources->currentMenuCb1 = PokenavMenuCallbacks[index].callback; gPokenavResources->currentMenuIndex = index; return TRUE; } -static u32 sub_81C75D4(void) +static u32 IsActiveMenuLoopTaskActive_(void) { - return sub_81C786C(); + return IsActiveMenuLoopTaskActive(); } static u32 GetCurrentMenuCB(void) @@ -549,19 +547,19 @@ void SetPokenavVBlankCallback(void) void *AllocSubstruct(u32 index, u32 size) { - gPokenavResources->field10[index] = Alloc(size); - return gPokenavResources->field10[index]; + gPokenavResources->substructPtrs[index] = Alloc(size); + return gPokenavResources->substructPtrs[index]; } void *GetSubstructPtr(u32 index) { - return gPokenavResources->field10[index]; + return gPokenavResources->substructPtrs[index]; } void FreePokenavSubstruct(u32 index) { - if (gPokenavResources->field10[index] != NULL) - FREE_AND_SET_NULL(gPokenavResources->field10[index]); + if (gPokenavResources->substructPtrs[index] != NULL) + FREE_AND_SET_NULL(gPokenavResources->substructPtrs[index]); } u32 GetPokenavMode(void) diff --git a/src/pokenav_conditions_1.c b/src/pokenav_conditions_1.c index 488d40d130..c27cd410c6 100644 --- a/src/pokenav_conditions_1.c +++ b/src/pokenav_conditions_1.c @@ -12,105 +12,104 @@ #include "strings.h" #include "text.h" #include "constants/songs.h" -#include "constants/species.h" struct PokenavSub11 { u32 monPal[3][0x20]; u8 fill[0x180]; u32 monPicGfx[3][0x800]; - u8 unk6300; - s16 unk6302; - u32 (*unk6304)(struct PokenavSub11 *); + u8 searchMode; + s16 monIndex; + u32 (*callback)(struct PokenavSub11 *); u8 fill2[0x6320 - 0x6308]; - u8 unk6320[3][24]; - u8 unk6368[3][64]; - struct ConditionGraph unk6428; - u8 unk6780[3]; - u8 unk6783[3]; - s8 unk6786; + u8 searchLocBuffer[3][24]; + u8 nameBuffer[3][64]; + struct ConditionGraph conditionData; + u8 sheen[3]; + u8 monMarks[3]; + s8 mark; s8 unk6787; s8 unk6788; s8 unk6789; - u8 unk678A; + u8 state; }; -void sub_81CD970(void); +void InitPartyConditionListParameters(void); void sub_81CD9F8(void); -u32 sub_81CD08C(struct PokenavSub11 *structPtr); -u32 sub_81CD19C(struct PokenavSub11 *structPtr); -u32 sub_81CD110(struct PokenavSub11 *structPtr); -u8 sub_81CD1E4(struct PokenavSub11 *structPtr); -u8 sub_81CD258(u8 arg0); -void sub_81CD824(s16 arg0, u8 arg1); -void sub_81CDA1C(s16 arg0, u8 arg1); -void sub_81CDB98(s16 arg0, u8 arg1); +u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr); +u32 GetConditionReturnCallback(struct PokenavSub11 *structPtr); +u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr); +u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr); +u8 SwitchConditionSummaryIndex(u8 moveUp); +void CopyMonNameGenderLocation(s16 id, u8 arg1); +void GetMonConditionGraphData(s16 id, u8 arg1); +void ConditionGraphDrawMonPic(s16 id, u8 arg1); // code -bool32 PokenavCallback_Init_7(void) +bool32 PokenavCallback_Init_PartyCondition(void) { - struct PokenavSub11 *structPtr = AllocSubstruct(11, sizeof(struct PokenavSub11)); + struct PokenavSub11 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH, sizeof(struct PokenavSub11)); if (structPtr == NULL) return FALSE; - sub_81D1ED4(&structPtr->unk6428); - sub_81CD970(); + InitConditionGraphData(&structPtr->conditionData); + InitPartyConditionListParameters(); gKeyRepeatStartDelay = 20; - structPtr->unk6304 = sub_81CD08C; + structPtr->callback = HandlePartyConditionInput; return TRUE; } -bool32 PokenavCallback_Init_9(void) +bool32 PokenavCallback_Init_ConditionGraphFromSearch(void) { - struct PokenavSub11 *structPtr = AllocSubstruct(11, sizeof(struct PokenavSub11)); + struct PokenavSub11 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH, sizeof(struct PokenavSub11)); if (structPtr == NULL) return FALSE; - sub_81D1ED4(&structPtr->unk6428); + InitConditionGraphData(&structPtr->conditionData); sub_81CD9F8(); gKeyRepeatStartDelay = 20; - structPtr->unk6304 = sub_81CD08C; + structPtr->callback = HandlePartyConditionInput; return TRUE; } -u32 sub_81CD070(void) +u32 GetPartyConditionCallback(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - return structPtr->unk6304(structPtr); + return structPtr->callback(structPtr); } -u32 sub_81CD08C(struct PokenavSub11 *structPtr) +u32 HandlePartyConditionInput(struct PokenavSub11 *structPtr) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); - u32 ret = sub_81CD1E4(structPtr); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + u32 ret = ConditionGraphHandleDpadInput(structPtr); - if (ret == 0) + if (ret == PARTY_CONDITION_FUNC_NONE) { if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - structPtr->unk6304 = sub_81CD19C; - ret = 2; + structPtr->callback = GetConditionReturnCallback; + ret = PARTY_CONDITION_FUNC_RETURN; } else if (JOY_NEW(A_BUTTON)) { - if (structPtr->unk6300 == 0) + if (structPtr->searchMode == 0) { - if (unkPtr->unk2 == unkPtr->unk0 - 1) + if (monListPtr->currIndex == monListPtr->listCount - 1) { PlaySE(SE_SELECT); - structPtr->unk6304 = sub_81CD19C; - ret = 2; + structPtr->callback = GetConditionReturnCallback; + ret = PARTY_CONDITION_FUNC_RETURN; } } else { PlaySE(SE_SELECT); - ret = 5; - structPtr->unk6304 = sub_81CD110; + ret = PARTY_CONDITION_FUNC_ADD_MARKINGS; + structPtr->callback = ConditionMenu_OpenMarkingsMenu; } } } @@ -118,204 +117,204 @@ u32 sub_81CD08C(struct PokenavSub11 *structPtr) return ret; } -u32 sub_81CD110(struct PokenavSub11 *structPtr) +u32 ConditionMenu_OpenMarkingsMenu(struct PokenavSub11 *structPtr) { - struct PokenavSub18 *unkPtr; + struct PokenavSub18 *monListPtr; u8 markings; - u32 ret = 0, boxId, monId; + u32 ret = PARTY_CONDITION_FUNC_NONE, boxId, monId; - if (!sub_811FBA4()) + if (!MonMarkingsMenuHandleInput()) { - structPtr->unk6783[structPtr->unk6786] = sub_81CEF14(); - unkPtr = GetSubstructPtr(18); - boxId = unkPtr->unk4[unkPtr->unk2].boxId; - monId = unkPtr->unk4[unkPtr->unk2].monId; - markings = structPtr->unk6783[structPtr->unk6786]; + structPtr->monMarks[structPtr->mark] = GetMonMarkingsData(); + monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + boxId = monListPtr->monData[monListPtr->currIndex].boxId; + monId = monListPtr->monData[monListPtr->currIndex].monId; + markings = structPtr->monMarks[structPtr->mark]; if (boxId == TOTAL_BOXES_COUNT) SetMonData(&gPlayerParty[monId], MON_DATA_MARKINGS, &markings); else SetBoxMonDataAt(boxId, monId, MON_DATA_MARKINGS, &markings); - structPtr->unk6304 = sub_81CD08C; - ret = 6; + structPtr->callback = HandlePartyConditionInput; + ret = PARTY_CONDITION_FUNC_CLOSE_MARKINGS; } return ret; } -u32 sub_81CD19C(struct PokenavSub11 *structPtr) +u32 GetConditionReturnCallback(struct PokenavSub11 *structPtr) { - if (structPtr->unk6300 == 0) + if (structPtr->searchMode == 0) return POKENAV_CONDITION_MENU; else - return POKENAV_MENU_A; + return POKENAV_RETURN_CONDITION_SEARCH; } -void sub_81CD1C0(void) +void FreePartyConditionSubstruct1(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - if (structPtr->unk6300 == 0) - FreePokenavSubstruct(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + if (structPtr->searchMode == 0) + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); - FreePokenavSubstruct(11); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_GRAPH); } -u8 sub_81CD1E4(struct PokenavSub11 *structPtr) +u8 ConditionGraphHandleDpadInput(struct PokenavSub11 *structPtr) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); u8 ret = 0; if (JOY_HELD(DPAD_UP)) { - if (structPtr->unk6300 == 0 || unkPtr->unk2 != 0) + if (structPtr->searchMode == 0 || monListPtr->currIndex != 0) { PlaySE(SE_SELECT); - ret = sub_81CD258(1); + ret = SwitchConditionSummaryIndex(1); } } else if (JOY_HELD(DPAD_DOWN)) { - if (structPtr->unk6300 == 0 || unkPtr->unk2 < unkPtr->unk0 - 1) + if (structPtr->searchMode == 0 || monListPtr->currIndex < monListPtr->listCount - 1) { PlaySE(SE_SELECT); - ret = sub_81CD258(0); + ret = SwitchConditionSummaryIndex(0); } } return ret; } -u8 sub_81CD258(u8 arg0) +u8 SwitchConditionSummaryIndex(u8 moveUp) { u16 r7; - bool8 r6, r0; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + bool8 wasNotLastMon, isNotLastMon; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - r7 = (arg0) ? structPtr->unk6788 : structPtr->unk6787; - sub_81D1F84(&structPtr->unk6428, structPtr->unk6428.unk14[structPtr->unk6786], structPtr->unk6428.unk14[r7]); - r6 = (unkPtr->unk2 != ((sub_81CDD5C() != 0) ? unkPtr->unk0 : unkPtr->unk0 - 1)); - if (arg0) + r7 = (moveUp) ? structPtr->unk6788 : structPtr->unk6787; + sub_81D1F84(&structPtr->conditionData, structPtr->conditionData.unk14[structPtr->mark], structPtr->conditionData.unk14[r7]); + wasNotLastMon = (monListPtr->currIndex != ((IsConditionMenuSearchMode() != 0) ? monListPtr->listCount : monListPtr->listCount - 1)); + if (moveUp) { structPtr->unk6788 = structPtr->unk6787; - structPtr->unk6787 = structPtr->unk6786; - structPtr->unk6786 = r7; + structPtr->unk6787 = structPtr->mark; + structPtr->mark = r7; structPtr->unk6789 = structPtr->unk6788; - unkPtr->unk2 = (unkPtr->unk2 == 0) ? unkPtr->unk0 - 1 : unkPtr->unk2 - 1; - structPtr->unk6302 = (unkPtr->unk2 != 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1; + monListPtr->currIndex = (monListPtr->currIndex == 0) ? monListPtr->listCount - 1 : monListPtr->currIndex - 1; + structPtr->monIndex = (monListPtr->currIndex != 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1; } else { structPtr->unk6787 = structPtr->unk6788; - structPtr->unk6788 = structPtr->unk6786; - structPtr->unk6786 = r7; + structPtr->unk6788 = structPtr->mark; + structPtr->mark = r7; structPtr->unk6789 = structPtr->unk6787; - unkPtr->unk2 = (unkPtr->unk2 < unkPtr->unk0 - 1) ? unkPtr->unk2 + 1 : 0; - structPtr->unk6302 = (unkPtr->unk2 < unkPtr->unk0 - 1) ? unkPtr->unk2 + 1 : 0; + monListPtr->currIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; + structPtr->monIndex = (monListPtr->currIndex < monListPtr->listCount - 1) ? monListPtr->currIndex + 1 : 0; } - r0 = (unkPtr->unk2 != ((sub_81CDD5C() != 0) ? unkPtr->unk0 : unkPtr->unk0 - 1)); - - if (!r6) - return 3; - else if (!r0) - return 4; + isNotLastMon = (monListPtr->currIndex != ((IsConditionMenuSearchMode() != 0) ? monListPtr->listCount : monListPtr->listCount - 1)); + + if (!wasNotLastMon) + return PARTY_CONDITION_FUNC_NO_TRANSITION; + else if (!isNotLastMon) + return PARTY_CONDITION_FUNC_SLIDE_MON_OUT; else - return 1; + return PARTY_CONDITION_FUNC_SLIDE_MON_IN; } -bool32 sub_81CD3C4(void) +bool32 LoadPartyConditionMenuGfx(void) { s32 var; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - switch (structPtr->unk678A) + switch (structPtr->state) { case 0: - sub_81CD824(unkPtr->unk2, 0); + CopyMonNameGenderLocation(monListPtr->currIndex, 0); break; case 1: - sub_81CDA1C(unkPtr->unk2, 0); + GetMonConditionGraphData(monListPtr->currIndex, 0); break; case 2: - sub_81CDB98(unkPtr->unk2, 0); + ConditionGraphDrawMonPic(monListPtr->currIndex, 0); break; case 3: - if (unkPtr->unk0 == 1) + if (monListPtr->listCount == 1) { - structPtr->unk6786 = 0; + structPtr->mark = 0; structPtr->unk6787 = 0; structPtr->unk6788 = 0; - structPtr->unk678A = 0; + structPtr->state = 0; return TRUE; } else { - structPtr->unk6786 = 0; + structPtr->mark = 0; structPtr->unk6787 = 1; structPtr->unk6788 = 2; } break; // These were probably ternaries just like cases 7-9, but couldn't match it any other way. case 4: - var = unkPtr->unk2 + 1; - if (var >= unkPtr->unk0) + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) var = 0; - sub_81CD824(var, 1); + CopyMonNameGenderLocation(var, 1); break; case 5: - var = unkPtr->unk2 + 1; - if (var >= unkPtr->unk0) + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) var = 0; - sub_81CDA1C(var, 1); + GetMonConditionGraphData(var, 1); break; case 6: - var = unkPtr->unk2 + 1; - if (var >= unkPtr->unk0) + var = monListPtr->currIndex + 1; + if (var >= monListPtr->listCount) var = 0; - sub_81CDB98(var, 1); + ConditionGraphDrawMonPic(var, 1); break; case 7: - sub_81CD824((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + CopyMonNameGenderLocation((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); break; case 8: - sub_81CDA1C((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + GetMonConditionGraphData((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); break; case 9: - sub_81CDB98((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); - structPtr->unk678A = 0; + ConditionGraphDrawMonPic((monListPtr->currIndex - 1 >= 0) ? monListPtr->currIndex - 1 : monListPtr->listCount - 1, 2); + structPtr->state = 0; return TRUE; } - structPtr->unk678A++; + structPtr->state++; return FALSE; } -bool32 sub_81CD548(u8 arg0) +bool32 SetConditionGraphData(u8 mode) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); - switch (arg0) + switch (mode) { case 0: - sub_81CD824(structPtr->unk6302, structPtr->unk6789); + CopyMonNameGenderLocation(structPtr->monIndex, structPtr->unk6789); break; case 1: - sub_81CDA1C(structPtr->unk6302, structPtr->unk6789); + GetMonConditionGraphData(structPtr->monIndex, structPtr->unk6789); break; case 2: - sub_81CDB98(structPtr->unk6302, structPtr->unk6789); + ConditionGraphDrawMonPic(structPtr->monIndex, structPtr->unk6789); return TRUE; } return FALSE; } -u8 *sub_81CD5CC(u8 *dst, const u8 *src, s16 n) +u8 *CopyStringLeftAlignedToConditionData(u8 *dst, const u8 *src, s16 n) { while (*src != EOS) *dst++ = *src++, n--; @@ -327,15 +326,15 @@ u8 *sub_81CD5CC(u8 *dst, const u8 *src, s16 n) return dst; } -u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3) +u8 *CopyMonConditionNameGender(u8 *str, u16 id, bool8 arg3) { u16 boxId, monId, gender, species, level, lvlDigits; struct BoxPokemon *boxMon; u8 *txtPtr, *str_; - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - boxId = unkPtr->unk4[id].boxId; - monId = unkPtr->unk4[id].monId; + boxId = monListPtr->monData[id].boxId; + monId = monListPtr->monData[id].monId; *(str++) = EXT_CTRL_CODE_BEGIN; *(str++) = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; *(str++) = TEXT_COLOR_BLUE; @@ -418,115 +417,115 @@ u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3) return str_; } -void sub_81CD824(s16 arg0, u8 arg1) +void CopyMonNameGenderLocation(s16 id, u8 arg1) { u16 boxId, i; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - if (arg0 != (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + if (id != (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) { - sub_81CD624(structPtr->unk6368[arg1], arg0, FALSE); - boxId = unkPtr->unk4[arg0].boxId; - structPtr->unk6320[arg1][0] = EXT_CTRL_CODE_BEGIN; - structPtr->unk6320[arg1][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; - structPtr->unk6320[arg1][2] = TEXT_COLOR_BLUE; - structPtr->unk6320[arg1][3] = TEXT_COLOR_TRANSPARENT; - structPtr->unk6320[arg1][4] = TEXT_COLOR_LIGHT_BLUE; + CopyMonConditionNameGender(structPtr->nameBuffer[arg1], id, FALSE); + boxId = monListPtr->monData[id].boxId; + structPtr->searchLocBuffer[arg1][0] = EXT_CTRL_CODE_BEGIN; + structPtr->searchLocBuffer[arg1][1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; + structPtr->searchLocBuffer[arg1][2] = TEXT_COLOR_BLUE; + structPtr->searchLocBuffer[arg1][3] = TEXT_COLOR_TRANSPARENT; + structPtr->searchLocBuffer[arg1][4] = TEXT_COLOR_LIGHT_BLUE; if (boxId == TOTAL_BOXES_COUNT) - sub_81CD5CC(&structPtr->unk6320[arg1][5], gText_InParty, 8); + CopyStringLeftAlignedToConditionData(&structPtr->searchLocBuffer[arg1][5], gText_InParty, 8); else - sub_81CD5CC(&structPtr->unk6320[arg1][5], GetBoxNamePtr(boxId), 8); + CopyStringLeftAlignedToConditionData(&structPtr->searchLocBuffer[arg1][5], GetBoxNamePtr(boxId), 8); } else { for (i = 0; i < 12; i++) - structPtr->unk6368[arg1][i] = CHAR_SPACE; - structPtr->unk6368[arg1][i] = EOS; + structPtr->nameBuffer[arg1][i] = CHAR_SPACE; + structPtr->nameBuffer[arg1][i] = EOS; for (i = 0; i < 8; i++) - structPtr->unk6320[arg1][i] = CHAR_SPACE; - structPtr->unk6320[arg1][i] = EOS; + structPtr->searchLocBuffer[arg1][i] = CHAR_SPACE; + structPtr->searchLocBuffer[arg1][i] = EOS; } } -void sub_81CD970(void) +void InitPartyConditionListParameters(void) { u16 i, count; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = AllocSubstruct(18, sizeof(struct PokenavSub18)); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); - structPtr->unk6300 = 0; + structPtr->searchMode = 0; for (i = 0, count = 0; i < CalculatePlayerPartyCount(); i++) { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { - unkPtr->unk4[count].boxId = TOTAL_BOXES_COUNT; - unkPtr->unk4[count].monId = i; - unkPtr->unk4[count].data = 0; + monListPtr->monData[count].boxId = TOTAL_BOXES_COUNT; + monListPtr->monData[count].monId = i; + monListPtr->monData[count].data = 0; count++; } } - unkPtr->unk4[count].boxId = 0; - unkPtr->unk4[count].monId = 0; - unkPtr->unk4[count].data = 0; - unkPtr->unk2 = 0; - unkPtr->unk0 = count + 1; - structPtr->unk678A = 0; + monListPtr->monData[count].boxId = 0; + monListPtr->monData[count].monId = 0; + monListPtr->monData[count].data = 0; + monListPtr->currIndex = 0; + monListPtr->listCount = count + 1; + structPtr->state = 0; } void sub_81CD9F8(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - structPtr->unk6300 = 1; - structPtr->unk678A = 0; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + structPtr->searchMode = 1; + structPtr->state = 0; } -void sub_81CDA1C(s16 arg0, u8 arg1) +void GetMonConditionGraphData(s16 id, u8 arg1) { u16 boxId, monId, i; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - if (arg0 != (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + if (id != (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) { - boxId = unkPtr->unk4[arg0].boxId; - monId = unkPtr->unk4[arg0].monId; - structPtr->unk6428.unk0[arg1][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - structPtr->unk6428.unk0[arg1][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - structPtr->unk6428.unk0[arg1][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - structPtr->unk6428.unk0[arg1][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - structPtr->unk6428.unk0[arg1][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); - structPtr->unk6780[arg1] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 255) + boxId = monListPtr->monData[id].boxId; + monId = monListPtr->monData[id].monId; + structPtr->conditionData.stat[arg1][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + structPtr->conditionData.stat[arg1][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + structPtr->conditionData.stat[arg1][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + structPtr->conditionData.stat[arg1][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + structPtr->conditionData.stat[arg1][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + structPtr->sheen[arg1] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 255) ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u : 9; - structPtr->unk6783[arg1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); - sub_81D2754(structPtr->unk6428.unk0[arg1], structPtr->unk6428.unk14[arg1]); + structPtr->monMarks[arg1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); + sub_81D2754(structPtr->conditionData.stat[arg1], structPtr->conditionData.unk14[arg1]); } else { - for (i = 0; i < 5; i++) + for (i = 0; i < FLAVOR_COUNT; i++) { - structPtr->unk6428.unk0[arg1][i] = 0; - structPtr->unk6428.unk14[arg1][i].unk0 = 155; - structPtr->unk6428.unk14[arg1][i].unk2 = 91; + structPtr->conditionData.stat[arg1][i] = 0; + structPtr->conditionData.unk14[arg1][i].unk0 = 155; + structPtr->conditionData.unk14[arg1][i].unk2 = 91; } } } -void sub_81CDB98(s16 arg0, u8 arg1) +void ConditionGraphDrawMonPic(s16 index, u8 arg1) { u16 boxId, monId, species; u32 personality, tid; - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); - if (arg0 == (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + if (index == (IsConditionMenuSearchMode() != 0 ? monListPtr->listCount : monListPtr->listCount - 1)) return; - boxId = unkPtr->unk4[arg0].boxId; - monId = unkPtr->unk4[arg0].monId; + boxId = monListPtr->monData[index].boxId; + monId = monListPtr->monData[index].monId; species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); @@ -534,92 +533,92 @@ void sub_81CDB98(s16 arg0, u8 arg1) LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, tid, personality), structPtr->monPal[arg1]); } -u16 sub_81CDC50(void) +u16 GetMonListCount(void) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); - return unkPtr->unk0; + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->listCount; } -u16 sub_81CDC60(void) +u16 GetConditionGraphCurrentMonIndex(void) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); - return unkPtr->unk2; + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->currIndex; } -struct ConditionGraph *sub_81CDC70(void) +struct ConditionGraph *GetConditionGraphDataPtr(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return &structPtr->unk6428; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return &structPtr->conditionData; } -u8 sub_81CDC84(void) +u8 GetMonMarkIndex(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6786; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->mark; } u8 sub_81CDC9C(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6302; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->monIndex; } -void *sub_81CDCB4(u8 id) +void *GetConditionMonPicGfx(u8 id) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); return structPtr->monPicGfx[id]; } -void *sub_81CDCD4(u8 id) +void *GetConditionMonPal(u8 id) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); return structPtr->monPal[id]; } u8 sub_81CDCEC(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); return structPtr->unk6789; } -u8 *sub_81CDD04(u8 id) +u8 *GetConditionMonNameBuffer(u8 id) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6368[id]; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->nameBuffer[id]; } -u8 *sub_81CDD24(u8 id) +u8 *GetConditionMonLocationBuffer(u8 id) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6320[id]; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->searchLocBuffer[id]; } -u16 sub_81CDD48(void) +u16 GetConditionMonDataBuffer(void) { - struct PokenavSub18 *unkPtr = GetSubstructPtr(18); - return unkPtr->unk4[unkPtr->unk2].data; + struct PokenavSub18 *monListPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + return monListPtr->monData[monListPtr->currIndex].data; } -bool32 sub_81CDD5C(void) +bool32 IsConditionMenuSearchMode(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - if (structPtr->unk6300 == 1) + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + if (structPtr->searchMode == 1) return TRUE; else return FALSE; } -u8 sub_81CDD7C(void) +u8 TryGetMonMarkId(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - if (structPtr->unk6300 == 1) - return structPtr->unk6783[structPtr->unk6786]; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + if (structPtr->searchMode == 1) + return structPtr->monMarks[structPtr->mark]; else return 0; } -u8 sub_81CDDB0(void) +u8 GetMonSheen(void) { - struct PokenavSub11 *structPtr = GetSubstructPtr(11); - return structPtr->unk6780[structPtr->unk6786]; + struct PokenavSub11 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_GRAPH); + return structPtr->sheen[structPtr->mark]; } diff --git a/src/pokenav_conditions_2.c b/src/pokenav_conditions_2.c index 7c536cd6a7..c0e8c7d6db 100644 --- a/src/pokenav_conditions_2.c +++ b/src/pokenav_conditions_2.c @@ -15,22 +15,22 @@ #include "strings.h" #include "text.h" -u32 sub_81CE37C(s32); -u32 sub_81CE2D0(s32); -u32 sub_81CE4D8(s32); -u32 sub_81CE5E4(s32); -u32 sub_81CE6BC(s32); -u32 sub_81CE700(s32); +u32 LoopedTask_TransitionMons(s32); +u32 LoopedTask_ExitPartyConditionMenu(s32); +u32 LoopedTask_MoveCursorNoTransition(s32); +u32 LoopedTask_SlideMonOut(s32); +u32 LoopedTask_OpenMonMarkingsWindow(s32); +u32 LoopedTask_CloseMonMarkingsWindow(s32); BSS_DATA u8 gUnknown_030012BC; const u16 gConditionGraphData_Pal[] = INCBIN_U16("graphics/pokenav/condition/graph_data.gbapal"); const u16 gConditionText_Pal[] = INCBIN_U16("graphics/pokenav/condition/text.gbapal"); const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); -const u32 gUnknown_0862323C[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); -const u16 gUnknown_08623338[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); +const u32 sConditionGraph_Tilemap[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); +const u16 sConditionGraphMonMarkingsPal[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); -const struct BgTemplate gUnknown_08623358[3] = +const struct BgTemplate sPartyConditionBgTemplates[3] = { { .bg = 1, @@ -61,7 +61,7 @@ const struct BgTemplate gUnknown_08623358[3] = } }; -const struct WindowTemplate gUnknown_08623364 = +const struct WindowTemplate sMonNameGenderWindowTemplate = { .bg = 1, .tilemapLeft = 13, @@ -72,7 +72,7 @@ const struct WindowTemplate gUnknown_08623364 = .baseBlock = 2 }; -const struct WindowTemplate gUnknown_0862336C = +const struct WindowTemplate sConditionGraphListIdWindowTemplate = { .bg = 1, .tilemapLeft = 1, @@ -83,7 +83,7 @@ const struct WindowTemplate gUnknown_0862336C = .baseBlock = 0x36 }; -const struct WindowTemplate gUnknown_08623374 = +const struct WindowTemplate sUnusedWindowTemplate1 = { .bg = 1, .tilemapLeft = 1, @@ -94,7 +94,7 @@ const struct WindowTemplate gUnknown_08623374 = .baseBlock = 0x44 }; -const struct WindowTemplate gUnknown_0862337C = +const struct WindowTemplate sUnusedWindowTemplate2 = { .bg = 1, .tilemapLeft = 13, @@ -105,15 +105,15 @@ const struct WindowTemplate gUnknown_0862337C = .baseBlock = 0x44 }; -const LoopedTask gUnknown_08623384[] = +const LoopedTask sPartyConditionLoopedTaskFuncs[] = { - NULL, - sub_81CE37C, - sub_81CE2D0, - sub_81CE4D8, - sub_81CE5E4, - sub_81CE6BC, - sub_81CE700 + [PARTY_CONDITION_FUNC_NONE] = NULL, + [PARTY_CONDITION_FUNC_SLIDE_MON_IN] = LoopedTask_TransitionMons, + [PARTY_CONDITION_FUNC_RETURN] = LoopedTask_ExitPartyConditionMenu, + [PARTY_CONDITION_FUNC_NO_TRANSITION] = LoopedTask_MoveCursorNoTransition, + [PARTY_CONDITION_FUNC_SLIDE_MON_OUT] = LoopedTask_SlideMonOut, + [PARTY_CONDITION_FUNC_ADD_MARKINGS] = LoopedTask_OpenMonMarkingsWindow, + [PARTY_CONDITION_FUNC_CLOSE_MARKINGS] = LoopedTask_CloseMonMarkingsWindow }; struct Pokenav7Struct @@ -121,84 +121,84 @@ struct Pokenav7Struct u32 loopedTaskId; u8 tilemapBuffers[3][BG_SCREEN_SIZE]; u8 filler[2]; - u8 unk1806[10]; - u32 (*unk1810)(void); - s16 unk1814; - u8 unk1816; - u16 unk1818; - u16 unk181A; + u8 partyPokeballSpriteIds[10]; + u32 (*callback)(void); + s16 monTransitionX; + u8 monPicSpriteId; + u16 monPalIndex; + u16 monGfxTileStart; void *unk181C; - u8 unk1820; - u8 unk1821; - u8 unk1822; - u8 unk1823; + u8 nameGenderWindowId; + u8 listIndexWindowId; + u8 unusedWindowId1; + u8 unusedWindowId2; struct PokemonMarkMenu monMarks; - struct Sprite *unk28dc; - struct Sprite *unk28e0[MAX_CONDITION_SPARKLES]; - u8 unk2908; + struct Sprite *monMarksSprite; + struct Sprite *conditionSparkleSprites[MAX_CONDITION_SPARKLES]; + u8 windowModeState; u8 filler2[0x38ac - 0x2909]; }; -extern s8 sub_81CDC84(void); // This function's declaration here is different than its definition in pokenav_unk_6. u8/s8 +extern s8 GetMonMarkIndex(void); // This function's declaration here is s8 vs. u8 in pokenav_conditions_1.c -u32 sub_81CDE94(s32 state); -u32 sub_81CDE80(void); -void sub_81CED30(u8 var); -void sub_81CE9E4(void); -void sub_81CE934(void); -bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2); +u32 LoopedTask_OpenPartyConditionGraph(s32 state); +u32 GetPartyConditionLoopedTaskActive(void); +void CreateConditionMonPic(u8 var); +void CreateMonMarkingsOrPokeballIndicators(void); +void CopyUnusedConditionWindowsToVram(void); +bool32 UpdateConditionGraphWindows(u8 a0, u16 a1, bool8 a2); void sub_81CEE44(void); -void sub_81CEE90(void); +void DoConditionGraphTransition(void); void sub_81CEEC8(void); void sub_81CEE68(void); -void sub_81CEE74(bool8 showBg); +void ToggleBg2(bool8 showBg); // code -bool32 sub_81CDDD4(void) +bool32 OpenPartyConditionMenu(void) { - struct Pokenav7Struct *structPtr = AllocSubstruct(0xC, sizeof(struct Pokenav7Struct)); + struct Pokenav7Struct *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MON_MARK_MENU, sizeof(struct Pokenav7Struct)); if (structPtr == NULL) return FALSE; - structPtr->unk1816 = 0xFF; - structPtr->loopedTaskId = CreateLoopedTask(sub_81CDE94, 1); - structPtr->unk1810 = sub_81CDE80; - structPtr->unk2908 = 0; + structPtr->monPicSpriteId = 0xFF; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_OpenPartyConditionGraph, 1); + structPtr->callback = GetPartyConditionLoopedTaskActive; + structPtr->windowModeState = 0; return TRUE; } -void sub_81CDE2C(s32 id) +void CreatePartyConditionLoopedTask(s32 id) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - structPtr->loopedTaskId = CreateLoopedTask(gUnknown_08623384[id], 1); - structPtr->unk1810 = sub_81CDE80; + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); + structPtr->loopedTaskId = CreateLoopedTask(sPartyConditionLoopedTaskFuncs[id], 1); + structPtr->callback = GetPartyConditionLoopedTaskActive; } -u32 sub_81CDE64(void) +u32 IsPartyConditionLoopedTaskActive(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - return structPtr->unk1810(); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); + return structPtr->callback(); } -u32 sub_81CDE80(void) +u32 GetPartyConditionLoopedTaskActive(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); return IsLoopedTaskActive(structPtr->loopedTaskId); } -u32 sub_81CDE94(s32 state) +u32 LoopedTask_OpenPartyConditionGraph(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); switch (state) { case 0: - if (sub_81CD3C4() != TRUE) + if (LoadPartyConditionMenuGfx() != TRUE) return LT_PAUSE; return LT_INC_AND_PAUSE; case 1: - InitBgTemplates(gUnknown_08623358, ARRAY_COUNT(gUnknown_08623358)); + InitBgTemplates(sPartyConditionBgTemplates, ARRAY_COUNT(sPartyConditionBgTemplates)); ChangeBgX(1, 0, 0); ChangeBgY(1, 0, 0); ChangeBgX(2, 0, 0); @@ -221,23 +221,23 @@ u32 sub_81CDE94(s32 state) LZ77UnCompVram(gPokenavCondition_Tilemap, structPtr->tilemapBuffers[0]); SetBgTilemapBuffer(3, structPtr->tilemapBuffers[0]); - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); CopyBgTilemapBufferToVram(3); CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); CopyPaletteIntoBufferUnfaded(gConditionText_Pal, 0xF0, 0x20); - structPtr->unk1814 = -80; + structPtr->monTransitionX = -80; return LT_INC_AND_PAUSE; case 4: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - LZ77UnCompVram(gUnknown_0862323C, structPtr->tilemapBuffers[2]); + LZ77UnCompVram(sConditionGraph_Tilemap, structPtr->tilemapBuffers[2]); SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]); CopyBgTilemapBufferToVram(2); CopyPaletteIntoBufferUnfaded(gConditionGraphData_Pal, 0x30, 0x20); - sub_81D21DC(2); + SetConditionGraphIOWindows(2); return LT_INC_AND_PAUSE; case 5: sub_8199DF0(1, 0, 0, 1); @@ -249,85 +249,85 @@ u32 sub_81CDE94(s32 state) if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - structPtr->unk1820 = AddWindow(&gUnknown_08623364); - if (sub_81CDD5C() == TRUE) + structPtr->nameGenderWindowId = AddWindow(&sMonNameGenderWindowTemplate); + if (IsConditionMenuSearchMode() == TRUE) { - structPtr->unk1821 = AddWindow(&gUnknown_0862336C); - structPtr->unk1822 = AddWindow(&gUnknown_08623374); - structPtr->unk1823 = AddWindow(&gUnknown_0862337C); + structPtr->listIndexWindowId = AddWindow(&sConditionGraphListIdWindowTemplate); + structPtr->unusedWindowId1 = AddWindow(&sUnusedWindowTemplate1); + structPtr->unusedWindowId2 = AddWindow(&sUnusedWindowTemplate2); } DeactivateAllTextPrinters(); return LT_INC_AND_PAUSE; case 7: - sub_81CED30(0); + CreateConditionMonPic(0); return LT_INC_AND_PAUSE; case 8: - sub_81CE9E4(); + CreateMonMarkingsOrPokeballIndicators(); return LT_INC_AND_PAUSE; case 9: - if (sub_81CDD5C() == TRUE) - sub_81CE934(); + if (IsConditionMenuSearchMode() == TRUE) + CopyUnusedConditionWindowsToVram(); return LT_INC_AND_PAUSE; case 10: - sub_81CE754(0, sub_81CDC84(), TRUE); + UpdateConditionGraphWindows(0, GetMonMarkIndex(), TRUE); return LT_INC_AND_PAUSE; case 11: - sub_81CE754(1, sub_81CDC84(), TRUE); + UpdateConditionGraphWindows(1, GetMonMarkIndex(), TRUE); return LT_INC_AND_PAUSE; case 12: - sub_81CE754(2, sub_81CDC84(), TRUE); + UpdateConditionGraphWindows(2, GetMonMarkIndex(), TRUE); return LT_INC_AND_PAUSE; case 13: - if (sub_81CE754(3, sub_81CDC84(), TRUE) != TRUE) + if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), TRUE) != TRUE) return LT_PAUSE; - PutWindowTilemap(structPtr->unk1820); - if (sub_81CDD5C() == TRUE) + PutWindowTilemap(structPtr->nameGenderWindowId); + if (IsConditionMenuSearchMode() == TRUE) { - PutWindowTilemap(structPtr->unk1821); - PutWindowTilemap(structPtr->unk1822); - PutWindowTilemap(structPtr->unk1823); + PutWindowTilemap(structPtr->listIndexWindowId); + PutWindowTilemap(structPtr->unusedWindowId1); + PutWindowTilemap(structPtr->unusedWindowId2); } return LT_INC_AND_PAUSE; case 14: ShowBg(1); HideBg(2); ShowBg(3); - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); return LT_INC_AND_PAUSE; case 15: PokenavFadeScreen(1); - if (!sub_81CDD5C()) + if (!IsConditionMenuSearchMode()) { - LoadLeftHeaderGfxForIndex(6); - sub_81C7FA0(1, TRUE, 0); - sub_81C7FA0(6, TRUE, 0); + LoadLeftHeaderGfxForIndex(POKENAV_GFX_PARTY_MENU); + ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, TRUE, 0); + ShowLeftHeaderGfx(POKENAV_GFX_PARTY_MENU, TRUE, 0); } return LT_INC_AND_PAUSE; case 16: if (IsPaletteFadeActive()) return LT_PAUSE; - if (!sub_81CDD5C() && sub_81C8010()) + if (!IsConditionMenuSearchMode() && AreLeftHeaderSpritesMoving()) return LT_PAUSE; SetVBlankCallback_(sub_81CEE44); return LT_INC_AND_PAUSE; case 17: - sub_81CEE90(); - sub_81D20AC(sub_81CDC70()); + DoConditionGraphTransition(); + InitConditionGraphState(GetConditionGraphDataPtr()); return LT_INC_AND_PAUSE; case 18: - if (sub_81D20BC(sub_81CDC70())) + if (SetupConditionGraphScanlineParams(GetConditionGraphDataPtr())) return LT_PAUSE; return LT_INC_AND_PAUSE; case 19: - sub_81CEE74(TRUE); + ToggleBg2(TRUE); return LT_INC_AND_PAUSE; case 20: - if (!TryUpdateConditionMonTransitionOn(sub_81CDC70(), &structPtr->unk1814)) + if (!TryUpdateConditionMonTransitionOn(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) { - ResetConditionSparkleSprites(structPtr->unk28e0); - if (sub_81CDD5C() == TRUE || sub_81CDC60() != sub_81CDC50()) - CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); + if (IsConditionMenuSearchMode() == TRUE || GetConditionGraphCurrentMonIndex() != GetMonListCount()) + CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); return LT_FINISH; } @@ -337,211 +337,211 @@ u32 sub_81CDE94(s32 state) return LT_FINISH; } -u32 sub_81CE2D0(s32 state) +u32 LoopedTask_ExitPartyConditionMenu(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); switch (state) { case 0: sub_81CEEC8(); - DestroyConditionSparkleSprites(structPtr->unk28e0); - return 1; + DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; case 1: - if (TryUpdateConditionMonTransitionOff(sub_81CDC70(), &structPtr->unk1814)) + if (TryUpdateConditionMonTransitionOff(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) return 2; - sub_81CEE74(FALSE); - return 1; + ToggleBg2(FALSE); + return LT_INC_AND_CONTINUE; case 2: PokenavFadeScreen(0); - if (!sub_81CDD5C()) - sub_81C78A0(); - return 0; + if (!IsConditionMenuSearchMode()) + SlideMenuHeaderDown(); + return LT_INC_AND_PAUSE; case 3: if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) - return 2; - FreeConditionSparkles(structPtr->unk28e0); + return LT_PAUSE; + FreeConditionSparkles(structPtr->conditionSparkleSprites); HideBg(1); HideBg(2); HideBg(3); - return 1; + return LT_INC_AND_CONTINUE; } return LT_FINISH; } -u32 sub_81CE37C(s32 state) +u32 LoopedTask_TransitionMons(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - struct ConditionGraph *unkPtr = sub_81CDC70(); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); + struct ConditionGraph *unkPtr = GetConditionGraphDataPtr(); switch (state) { case 0: - sub_81CD548(0); - return 1; + SetConditionGraphData(0); + return LT_INC_AND_CONTINUE; case 1: - sub_81CD548(1); - return 1; + SetConditionGraphData(1); + return LT_INC_AND_CONTINUE; case 2: - sub_81CD548(2); - DestroyConditionSparkleSprites(structPtr->unk28e0); - return 1; + SetConditionGraphData(2); + DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; case 3: TransitionConditionGraph(unkPtr); - return 1; + return LT_INC_AND_CONTINUE; case 4: - if (!MoveConditionMonOffscreen(&structPtr->unk1814)) + if (!MoveConditionMonOffscreen(&structPtr->monTransitionX)) { - sub_81CED30(sub_81CDC84()); - return 1; + CreateConditionMonPic(GetMonMarkIndex()); + return LT_INC_AND_CONTINUE; } - return 2; + return LT_PAUSE; case 5: - sub_81CE754(0, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 6: - sub_81CE754(1, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 7: - sub_81CE754(2, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 8: - if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) - return 1; - return 2; + if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; case 9: - unkPtr = sub_81CDC70(); - if (!TryUpdateConditionMonTransitionOn(unkPtr, &structPtr->unk1814)) + unkPtr = GetConditionGraphDataPtr(); + if (!TryUpdateConditionMonTransitionOn(unkPtr, &structPtr->monTransitionX)) { - ResetConditionSparkleSprites(structPtr->unk28e0); - if (sub_81CDD5C() != TRUE && sub_81CDC60() == sub_81CDC50()) - return 1; + ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); + if (IsConditionMenuSearchMode() != TRUE && GetConditionGraphCurrentMonIndex() == GetMonListCount()) + return LT_INC_AND_CONTINUE; - CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); - return 1; + CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); + return LT_INC_AND_CONTINUE; } - return 2; + return LT_PAUSE; } return LT_FINISH; } -u32 sub_81CE4D8(s32 state) +u32 LoopedTask_MoveCursorNoTransition(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); switch (state) { case 0: - sub_81CD548(0); - return 1; + SetConditionGraphData(0); + return LT_INC_AND_CONTINUE; case 1: - sub_81CD548(1); - return 1; + SetConditionGraphData(1); + return LT_INC_AND_CONTINUE; case 2: - sub_81CD548(2); - return 1; + SetConditionGraphData(2); + return LT_INC_AND_CONTINUE; case 3: - sub_81CED30(sub_81CDC84()); - return 1; + CreateConditionMonPic(GetMonMarkIndex()); + return LT_INC_AND_CONTINUE; case 4: - sub_81CE754(0, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 5: - sub_81CE754(1, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 6: - sub_81CE754(2, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 7: - if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) - return 1; - return 2; + if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; case 8: - if (!TryUpdateConditionMonTransitionOn(sub_81CDC70(), &structPtr->unk1814)) + if (!TryUpdateConditionMonTransitionOn(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) { - ResetConditionSparkleSprites(structPtr->unk28e0); - CreateConditionSparkleSprites(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); - return 1; + ResetConditionSparkleSprites(structPtr->conditionSparkleSprites); + CreateConditionSparkleSprites(structPtr->conditionSparkleSprites, structPtr->monPicSpriteId, GetMonSheen()); + return LT_INC_AND_CONTINUE; } - return 2; + return LT_PAUSE; } return LT_FINISH; } -u32 sub_81CE5E4(s32 state) +u32 LoopedTask_SlideMonOut(s32 state) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); switch (state) { case 0: - sub_81CD548(0); - return 1; + SetConditionGraphData(0); + return LT_INC_AND_CONTINUE; case 1: - sub_81CD548(1); - return 1; + SetConditionGraphData(1); + return LT_INC_AND_CONTINUE; case 2: - sub_81CD548(2); - DestroyConditionSparkleSprites(structPtr->unk28e0); - return 1; + SetConditionGraphData(2); + DestroyConditionSparkleSprites(structPtr->conditionSparkleSprites); + return LT_INC_AND_CONTINUE; case 3: - if (!TryUpdateConditionMonTransitionOff(sub_81CDC70(), &structPtr->unk1814)) - return 1; - return 2; + if (!TryUpdateConditionMonTransitionOff(GetConditionGraphDataPtr(), &structPtr->monTransitionX)) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; case 4: - sub_81CE754(0, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(0, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 5: - sub_81CE754(1, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(1, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 6: - sub_81CE754(2, sub_81CDC84(), FALSE); - return 1; + UpdateConditionGraphWindows(2, GetMonMarkIndex(), FALSE); + return LT_INC_AND_CONTINUE; case 7: - if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) - return 1; - return 2; + if (UpdateConditionGraphWindows(3, GetMonMarkIndex(), FALSE) == TRUE) + return LT_INC_AND_CONTINUE; + return LT_PAUSE; } return LT_FINISH; } -u32 sub_81CE6BC(s32 state) +u32 LoopedTask_OpenMonMarkingsWindow(s32 state) { switch (state) { case 0: - sub_811FAA4(sub_81CDD7C(), 176, 32); - return 1; + sub_811FAA4(TryGetMonMarkId(), 176, 32); + return LT_INC_AND_CONTINUE; case 1: PrintHelpBarText(HELPBAR_CONDITION_MARKINGS); - return 1; + return LT_INC_AND_CONTINUE; case 2: if (WaitForHelpBar() == TRUE) - return 2; - return 1; + return LT_PAUSE; + return LT_INC_AND_CONTINUE; } return LT_FINISH; } -u32 sub_81CE700(s32 state) +u32 LoopedTask_CloseMonMarkingsWindow(s32 state) { switch (state) { case 0: sub_811FAF8(); - return 1; + return LT_INC_AND_CONTINUE; case 1: PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS); - return 1; + return LT_INC_AND_CONTINUE; case 2: if (WaitForHelpBar() == TRUE) - return 2; - return 1; + return LT_PAUSE; + return LT_INC_AND_CONTINUE; } return LT_FINISH; @@ -555,68 +555,68 @@ static u8 *UnusedPrintNumberString(u8 *dst, u16 num) return txtPtr; } -bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2) +bool32 UpdateConditionGraphWindows(u8 mode, u16 bufferIndex, bool8 winMode) { u8 text[32]; const u8 *str; - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - switch (a0) + switch (mode) { case 0: - FillWindowPixelBuffer(structPtr->unk1820, 0); - if (sub_81CDD5C() == TRUE) - FillWindowPixelBuffer(structPtr->unk1821, 0); + FillWindowPixelBuffer(structPtr->nameGenderWindowId, 0); + if (IsConditionMenuSearchMode() == TRUE) + FillWindowPixelBuffer(structPtr->listIndexWindowId, 0); break; case 1: - if (sub_81CDC60() != sub_81CDC50() - 1 || sub_81CDD5C() == TRUE) + if (GetConditionGraphCurrentMonIndex() != GetMonListCount() - 1 || IsConditionMenuSearchMode() == TRUE) { - str = sub_81CDD04(a1); - AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 1, 0, NULL); + str = GetConditionMonNameBuffer(bufferIndex); + AddTextPrinterParameterized(structPtr->nameGenderWindowId, 1, str, 0, 1, 0, NULL); } break; case 2: - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) { - str = sub_81CDD24(a1); - AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 17, 0, NULL); + str = GetConditionMonLocationBuffer(bufferIndex); + AddTextPrinterParameterized(structPtr->nameGenderWindowId, 1, str, 0, 17, 0, NULL); text[0] = EXT_CTRL_CODE_BEGIN; text[1] = EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW; text[2] = TEXT_COLOR_BLUE; text[3] = TEXT_COLOR_TRANSPARENT; text[4] = TEXT_COLOR_LIGHT_BLUE; StringCopy(text + 5, gText_Number2); - AddTextPrinterParameterized(structPtr->unk1821, 1, text, 4, 1, 0, NULL); - ConvertIntToDecimalStringN(text + 5, sub_81CDD48(), STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(structPtr->unk1821, 1, text, 28, 1, 0, NULL); + AddTextPrinterParameterized(structPtr->listIndexWindowId, 1, text, 4, 1, 0, NULL); + ConvertIntToDecimalStringN(text + 5, GetConditionMonDataBuffer(), STR_CONV_MODE_RIGHT_ALIGN, 4); + AddTextPrinterParameterized(structPtr->listIndexWindowId, 1, text, 28, 1, 0, NULL); } break; case 3: - switch (structPtr->unk2908) + switch (structPtr->windowModeState) { case 0: - if (a2) - CopyWindowToVram(structPtr->unk1820, 3); + if (winMode) + CopyWindowToVram(structPtr->nameGenderWindowId, 3); else - CopyWindowToVram(structPtr->unk1820, 2); + CopyWindowToVram(structPtr->nameGenderWindowId, 2); - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) { - structPtr->unk2908++; + structPtr->windowModeState++; return FALSE; } else { - structPtr->unk2908 = 0; + structPtr->windowModeState = 0; return TRUE; } case 1: - if (a2) - CopyWindowToVram(structPtr->unk1821, 3); + if (winMode) + CopyWindowToVram(structPtr->listIndexWindowId, 3); else - CopyWindowToVram(structPtr->unk1821, 2); + CopyWindowToVram(structPtr->listIndexWindowId, 2); - structPtr->unk2908 = 0; + structPtr->windowModeState = 0; return TRUE; } } @@ -624,36 +624,36 @@ bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2) return FALSE; } -void sub_81CE934(void) +void CopyUnusedConditionWindowsToVram(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - CopyWindowToVram(structPtr->unk1822, 3); - CopyWindowToVram(structPtr->unk1823, 3); + CopyWindowToVram(structPtr->unusedWindowId1, 3); + CopyWindowToVram(structPtr->unusedWindowId2, 3); } void sub_81CE964(struct Sprite *sprite) { - if (sprite->data[0] == sub_81CDC60()) + if (sprite->data[0] == GetConditionGraphCurrentMonIndex()) StartSpriteAnim(sprite, 0); else StartSpriteAnim(sprite, 1); } -void sub_81CE990(struct Sprite *sprite) +void HighlightCurrentPartyIndexPokeball(struct Sprite *sprite) { - if (sub_81CDC60() == sub_81CDC50() - 1) + if (GetConditionGraphCurrentMonIndex() == GetMonListCount() - 1) sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x65); else sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x66); } -void sub_81CE9C8(struct Sprite *sprite) +void MonMarkingsCallback(struct Sprite *sprite) { - StartSpriteAnim(sprite, sub_81CDD7C()); + StartSpriteAnim(sprite, TryGetMonMarkId()); } -void sub_81CE9E4(void) +void CreateMonMarkingsOrPokeballIndicators(void) { struct SpriteSheet sprSheets[4]; struct SpriteTemplate sprTemplate; @@ -661,39 +661,40 @@ void sub_81CE9E4(void) struct SpriteSheet sprSheet; struct Sprite *sprite; u16 i, spriteId; - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); LoadConditionSelectionIcons(sprSheets, &sprTemplate, sprPals); - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) { structPtr->monMarks.baseTileTag = 0x6A; structPtr->monMarks.basePaletteTag = 0x6A; sub_811F90C(&structPtr->monMarks); sub_811FA90(); - sprite = sub_811FF94(0x69, 0x69, gUnknown_08623338); + sprite = CreateMonMarkingsSpriteWithPal(0x69, 0x69, sConditionGraphMonMarkingsPal); sprite->oam.priority = 3; sprite->pos1.x = 192; sprite->pos1.y = 32; - sprite->callback = sub_81CE9C8; - structPtr->unk28dc = sprite; - sub_81C7990(IndexOfSpritePaletteTag(0x69), 0); + sprite->callback = MonMarkingsCallback; + structPtr->monMarksSprite = sprite; + PokenavFillPalette(IndexOfSpritePaletteTag(0x69), 0); } else { + // party mode -> add pokeballs on right hand side LoadSpriteSheets(sprSheets); Pokenav_AllocAndLoadPalettes(sprPals); - for (i = 0; i < sub_81CDC50() - 1; i++) + for (i = 0; i < GetMonListCount() - 1; i++) { spriteId = CreateSprite(&sprTemplate, 226, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - structPtr->unk1806[i] = spriteId; + structPtr->partyPokeballSpriteIds[i] = spriteId; gSprites[spriteId].data[0] = i; gSprites[spriteId].callback = sub_81CE964; } else { - structPtr->unk1806[i] = 0xFF; + structPtr->partyPokeballSpriteIds[i] = 0xFF; } } @@ -704,27 +705,27 @@ void sub_81CE9E4(void) spriteId = CreateSprite(&sprTemplate, 230, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - structPtr->unk1806[i] = spriteId; + structPtr->partyPokeballSpriteIds[i] = spriteId; gSprites[spriteId].oam.size = 0; } else { - structPtr->unk1806[i] = 0xFF; + structPtr->partyPokeballSpriteIds[i] = 0xFF; } } sprTemplate.tileTag = 0x66; - sprTemplate.callback = sub_81CE990; + sprTemplate.callback = HighlightCurrentPartyIndexPokeball; spriteId = CreateSprite(&sprTemplate, 222, (i * 20) + 8, 0); if (spriteId != MAX_SPRITES) { - structPtr->unk1806[i] = spriteId; + structPtr->partyPokeballSpriteIds[i] = spriteId; gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16); gSprites[spriteId].oam.size = SPRITE_SIZE(32x16); } else { - structPtr->unk1806[i] = 0xFF; + structPtr->partyPokeballSpriteIds[i] = 0xFF; } } @@ -738,9 +739,9 @@ void sub_81CEBF4(struct Pokenav7Struct *structPtr) { u8 i; - if (sub_81CDD5C() == TRUE) + if (IsConditionMenuSearchMode() == TRUE) { - DestroySprite(structPtr->unk28dc); + DestroySprite(structPtr->monMarksSprite); FreeSpriteTilesByTag(0x6A); FreeSpriteTilesByTag(0x69); FreeSpritePaletteByTag(0x6A); @@ -749,7 +750,7 @@ void sub_81CEBF4(struct Pokenav7Struct *structPtr) else { for (i = 0; i < 7; i++) - DestroySprite(&gSprites[structPtr->unk1806[i]]); + DestroySprite(&gSprites[structPtr->partyPokeballSpriteIds[i]]); FreeSpriteTilesByTag(0x65); FreeSpriteTilesByTag(0x66); @@ -758,83 +759,83 @@ void sub_81CEBF4(struct Pokenav7Struct *structPtr) FreeSpritePaletteByTag(0x66); } - if (structPtr->unk1816 != 0xFF) + if (structPtr->monPicSpriteId != 0xFF) { - DestroySprite(&gSprites[structPtr->unk1816]); + DestroySprite(&gSprites[structPtr->monPicSpriteId]); FreeSpriteTilesByTag(0x64); FreeSpritePaletteByTag(0x64); } } -void sub_81CECA0(void) +void FreePartyConditionSubstruct2(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - RemoveWindow(structPtr->unk1820); - if (sub_81CDD5C() == TRUE) + RemoveWindow(structPtr->nameGenderWindowId); + if (IsConditionMenuSearchMode() == TRUE) { - RemoveWindow(structPtr->unk1821); - RemoveWindow(structPtr->unk1822); - RemoveWindow(structPtr->unk1823); + RemoveWindow(structPtr->listIndexWindowId); + RemoveWindow(structPtr->unusedWindowId1); + RemoveWindow(structPtr->unusedWindowId2); } else { - sub_81C7FDC(); + SetLeftHeaderSpritesInvisibility(); } SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); sub_81CEBF4(structPtr); sub_81CEE68(); - FreePokenavSubstruct(0xC); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_MARK_MENU); } -void sub_81CED10(struct Sprite *sprite) +void MonPicGfxSpriteCallback(struct Sprite *sprite) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); - sprite->pos1.x = structPtr->unk1814 + 38; + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); + sprite->pos1.x = structPtr->monTransitionX + 38; } -void sub_81CED30(u8 var) +void CreateConditionMonPic(u8 id) { struct SpriteTemplate sprTemplate; struct SpriteSheet sprSheet; struct SpritePalette sprPal; u8 spriteId; - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - if (structPtr->unk1816 == 0xFF) + if (structPtr->monPicSpriteId == 0xFF) { LoadConditionMonPicTemplate(&sprSheet, &sprTemplate, &sprPal); - sprSheet.data = sub_81CDCB4(var); - sprPal.data = sub_81CDCD4(var); - structPtr->unk1818 = LoadSpritePalette(&sprPal); - structPtr->unk181A = LoadSpriteSheet(&sprSheet); + sprSheet.data = GetConditionMonPicGfx(id); + sprPal.data = GetConditionMonPal(id); + structPtr->monPalIndex = LoadSpritePalette(&sprPal); + structPtr->monGfxTileStart = LoadSpriteSheet(&sprSheet); spriteId = CreateSprite(&sprTemplate, 38, 104, 0); - structPtr->unk1816 = spriteId; + structPtr->monPicSpriteId = spriteId; if (spriteId == MAX_SPRITES) { FreeSpriteTilesByTag(0x64); FreeSpritePaletteByTag(0x64); - structPtr->unk1816 = 0xFF; + structPtr->monPicSpriteId = 0xFF; } else { - structPtr->unk1816 = spriteId; - gSprites[structPtr->unk1816].callback = sub_81CED10; - structPtr->unk181C = (void*)(VRAM) + 0x10000 + (structPtr->unk181A * 32); - structPtr->unk1818 = (structPtr->unk1818 * 16) + 0x100; + structPtr->monPicSpriteId = spriteId; + gSprites[structPtr->monPicSpriteId].callback = MonPicGfxSpriteCallback; + structPtr->unk181C = (void*)(VRAM) + 0x10000 + (structPtr->monGfxTileStart * 32); + structPtr->monPalIndex = (structPtr->monPalIndex * 16) + 0x100; } } else { - DmaCopy16Defvars(3, sub_81CDCB4(var), structPtr->unk181C, 0x800); - LoadPalette(sub_81CDCD4(var), structPtr->unk1818, 0x20); + DmaCopy16Defvars(3, GetConditionMonPicGfx(id), structPtr->unk181C, 0x800); + LoadPalette(GetConditionMonPal(id), structPtr->monPalIndex, 0x20); } } void sub_81CEE44(void) { - struct ConditionGraph *unk = sub_81CDC70(); + struct ConditionGraph *unk = GetConditionGraphDataPtr(); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -847,7 +848,7 @@ void sub_81CEE68(void) SetPokenavVBlankCallback(); } -void sub_81CEE74(bool8 showBg) +void ToggleBg2(bool8 showBg) { if (showBg) ShowBg(2); @@ -855,29 +856,29 @@ void sub_81CEE74(bool8 showBg) HideBg(2); } -void sub_81CEE90(void) +void DoConditionGraphTransition(void) { - struct ConditionGraph *unk = sub_81CDC70(); - u8 id = sub_81CDC84(); + struct ConditionGraph *conditionPtr = GetConditionGraphDataPtr(); + u8 id = GetMonMarkIndex(); gUnknown_030012BC = id; - sub_81D1F84(unk, unk->unk14[3], unk->unk14[id]); - TransitionConditionGraph(unk); + sub_81D1F84(conditionPtr, conditionPtr->unk14[3], conditionPtr->unk14[id]); + TransitionConditionGraph(conditionPtr); } void sub_81CEEC8(void) { - struct ConditionGraph *unk = sub_81CDC70(); + struct ConditionGraph *conditionPtr = GetConditionGraphDataPtr(); - if (sub_81CDD5C() || sub_81CDC60() != sub_81CDC50() - 1) - sub_81D1F84(unk, unk->unk14[sub_81CDC84()], unk->unk14[3]); + if (IsConditionMenuSearchMode() || GetConditionGraphCurrentMonIndex() != GetMonListCount() - 1) + sub_81D1F84(conditionPtr, conditionPtr->unk14[GetMonMarkIndex()], conditionPtr->unk14[3]); } -u8 sub_81CEF14(void) +u8 GetMonMarkingsData(void) { - struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct Pokenav7Struct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_MARK_MENU); - if (sub_81CDD5C() == 1) + if (IsConditionMenuSearchMode() == 1) return structPtr->monMarks.markings; else return 0; diff --git a/src/pokenav_conditions_3.c b/src/pokenav_conditions_3.c index 15b687a429..d02d844d0d 100644 --- a/src/pokenav_conditions_3.c +++ b/src/pokenav_conditions_3.c @@ -10,67 +10,78 @@ #include "international_string_util.h" #include "constants/songs.h" +enum +{ + CONDITION_SEARCH_FUNC_NONE, + CONDITION_SEARCH_FUNC_MOVE_UP, + CONDITION_SEARCH_FUNC_MOVE_DOWN, + CONDITION_SEARCH_FUNC_PAGE_UP, + CONDITION_SEARCH_FUNC_PAGE_DOWN, + CONDITION_SEARCH_FUNC_EXIT, + CONDITION_SEARCH_FUNC_SELECT_MON, +}; + struct PokenavSub7 { - u32 (*unk0)(struct PokenavSub7 *); + u32 (*callback)(struct PokenavSub7 *); u32 loopedTaskId; u8 fill1[4]; - s32 unkC; - s32 unk10; - u32 unk14; - u32 unk18; - u32 unk1C; - struct PokenavSub18 *unkPtr; + s32 boxId; + s32 monId; + u32 conditionDataId; + u32 returnFromGraph; + u32 isPartyCondition; + struct PokenavSub18 *monList; }; struct PokenavSub8 { bool32 (*callback)(void); - u32 ltid; + u32 ltid; //looped task Id u16 winid; - bool32 unkC; + bool32 fromGraph; u8 buff[BG_SCREEN_SIZE]; }; // size: 0x810 -static u32 sub_81CF010(struct PokenavSub7 *structPtr); -static u32 sub_81CF030(struct PokenavSub7 *structPtr); -static u32 sub_81CF0B8(struct PokenavSub7 *structPtr); -static u32 sub_81CF0B0(struct PokenavSub7 *structPtr); -static u32 sub_81CF11C(s32 state); -static u32 sub_81CF134(s32 state); -static u32 sub_81CF1C4(s32 state); -static u32 sub_81CF1D8(s32 state); +static u32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr); +static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr); +static u32 OpenConditionGraphFromSearchList(struct PokenavSub7 *structPtr); +static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr); +static u32 GetConditionSearchLoopedTask(s32 state); +static u32 BuildPartyMonSearchResults(s32 state); +static u32 InitBoxMonSearchResults(s32 state); +static u32 BuildBoxMonSearchResults(s32 state); static u32 sub_81CF278(s32 state); -static u32 sub_81CF578(s32 state); -static u32 sub_81CF5F0(s32 state); -static u32 sub_81CF668(s32 state); -static u32 sub_81CF6E0(s32 state); -static u32 sub_81CF758(s32 state); -static u32 sub_81CF798(s32 state); +static u32 LoopedTask_MoveSearchListCursorUp(s32 state); +static u32 LoopedTask_MoveSearchListCursorDown(s32 state); +static u32 LoopedTask_MoveSearchListPageUp(s32 state); +static u32 LoopedTask_MoveSearchListPageDown(s32 state); +static u32 LoopedTask_ExitConditionSearchMenu(s32 state); +static u32 LoopedTask_SelectSearchResult(s32 state); static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item); -static bool32 sub_81CF3E4(void); -static u32 sub_81CF418(s32 state); -static void sub_81CF7C8(struct PokenavSub8 *); -static void sub_81CF7F4(struct PokenavSub8 *); -static void sub_81CF88C(void); -static void sub_81CF8E4(struct PokenavMonList *, u8 *); +static bool32 GetSearchResultCurrentLoopedTaskActive(void); +static u32 LoopedTask_OpenConditionSearchResults(s32 state); +static void AddSearchResultListMenuWindow(struct PokenavSub8 *); +static void PrintSearchResultListMenuItems(struct PokenavSub8 *); +static void InitConditionSearchListMenuTemplate(void); +static void PrintSearchMonListItem(struct PokenavMonList *, u8 *); -static const u32 gUnknown_086233A0[] = {0x16, 0x17, 0x18, 0x21, 0x2F}; +static const u32 sSearchMonDataIds[] = {MON_DATA_COOL, MON_DATA_BEAUTY, MON_DATA_CUTE, MON_DATA_SMART, MON_DATA_TOUGH}; -static const LoopedTask gUnknown_086233B4[] = +static const LoopedTask sConditionSearchLoopedTaskFuncs[] = { - sub_81CF134, - sub_81CF1C4, - sub_81CF1D8, + BuildPartyMonSearchResults, + InitBoxMonSearchResults, + BuildBoxMonSearchResults, sub_81CF278 }; -static const u16 gUnknown_086233C4[] = INCBIN_U16("graphics/pokenav/condition_search2.gbapal"); -static const u32 gUnknown_086233E4[] = INCBIN_U32("graphics/pokenav/condition_search2.4bpp.lz"); -static const u32 gUnknown_086234AC[] = INCBIN_U32("graphics/pokenav/condition_search2.bin.lz"); +static const u16 sConditionSearchResultFramePal[] = INCBIN_U16("graphics/pokenav/condition_search2.gbapal"); +static const u32 sConditionSearchResultTiles[] = INCBIN_U32("graphics/pokenav/condition_search2.4bpp.lz"); +static const u32 sConditionSearchResultTilemap[] = INCBIN_U32("graphics/pokenav/condition_search2.bin.lz"); static const u16 gUnknown_08623570[] = INCBIN_U16("graphics/pokenav/8623570.gbapal"); -static const struct BgTemplate gUnknown_08623590[] = +static const struct BgTemplate sConditionSearchResultBgTemplates[] = { { .bg = 1, @@ -91,18 +102,18 @@ static const struct BgTemplate gUnknown_08623590[] = } }; -static const LoopedTask gUnknown_08623598[] = +static const LoopedTask sSearchResultLoopTaskFuncs[] = { - NULL, - sub_81CF578, - sub_81CF5F0, - sub_81CF668, - sub_81CF6E0, - sub_81CF758, - sub_81CF798 + [CONDITION_SEARCH_FUNC_NONE] = NULL, + [CONDITION_SEARCH_FUNC_MOVE_UP] = LoopedTask_MoveSearchListCursorUp, + [CONDITION_SEARCH_FUNC_MOVE_DOWN] = LoopedTask_MoveSearchListCursorDown, + [CONDITION_SEARCH_FUNC_PAGE_UP] = LoopedTask_MoveSearchListPageUp, + [CONDITION_SEARCH_FUNC_PAGE_DOWN] = LoopedTask_MoveSearchListPageDown, + [CONDITION_SEARCH_FUNC_EXIT] = LoopedTask_ExitConditionSearchMenu, + [CONDITION_SEARCH_FUNC_SELECT_MON] = LoopedTask_SelectSearchResult }; -static const struct WindowTemplate gUnknown_086235B4 = +static const struct WindowTemplate sSearchResultListMenuWindowTemplate = { .bg = 1, .tilemapLeft = 1, @@ -117,137 +128,139 @@ static const u8 sText_MaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHIT static const u8 sText_FemaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}"); -bool32 PokenavCallback_Init_8(void) +bool32 PokenavCallback_Init_ConditionSearch(void) { struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); if (structPtr == NULL) return FALSE; - structPtr->unkPtr = AllocSubstruct(18, sizeof(struct PokenavSub18)); - if (structPtr->unkPtr == NULL) + structPtr->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); + if (structPtr->monList == NULL) return FALSE; - structPtr->unk0 = sub_81CF010; - structPtr->loopedTaskId = CreateLoopedTask(sub_81CF11C, 1); - structPtr->unk18 = 0; - structPtr->unk14 = gUnknown_086233A0[GetSelectedConditionSearch()]; + structPtr->callback = HandleConditionSearchInput_WaitSetup; + structPtr->loopedTaskId = CreateLoopedTask(GetConditionSearchLoopedTask, 1); + structPtr->returnFromGraph = 0; + structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } -bool32 PokenavCallback_Init_10(void) +// return to search results from condition graph +bool32 PokenavCallback_Init_ReturnToMonSearchList(void) { - struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); + struct PokenavSub7 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS, sizeof(struct PokenavSub7)); if (structPtr == NULL) return FALSE; - structPtr->unkPtr = GetSubstructPtr(18); - structPtr->unk0 = sub_81CF030; - structPtr->unk18 = 1; - structPtr->unk14 = gUnknown_086233A0[GetSelectedConditionSearch()]; + structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + structPtr->callback = HandleConditionSearchInput; + structPtr->returnFromGraph = 1; + structPtr->conditionDataId = sSearchMonDataIds[GetSelectedConditionSearch()]; return TRUE; } -u32 sub_81CEFDC(void) +u32 GetConditionSearchResultsCallback(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(7); - return structPtr->unk0(structPtr); + struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return structPtr->callback(structPtr); } -void sub_81CEFF0(void) +void FreeSearchResultSubstruct1(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(7); - if (structPtr->unk1C == 0) - FreePokenavSubstruct(18); - FreePokenavSubstruct(7); + struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + if (structPtr->isPartyCondition == 0) + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); } -static bool32 sub_81CF010(struct PokenavSub7 *structPtr) +static bool32 HandleConditionSearchInput_WaitSetup(struct PokenavSub7 *structPtr) { if (!IsLoopedTaskActive(structPtr->loopedTaskId)) - structPtr->unk0 = sub_81CF030; + structPtr->callback = HandleConditionSearchInput; return FALSE; } -static u32 sub_81CF030(struct PokenavSub7 *structPtr) +static u32 HandleConditionSearchInput(struct PokenavSub7 *structPtr) { if (JOY_REPEAT(DPAD_UP)) - return 1; - if (JOY_REPEAT(DPAD_DOWN)) - return 2; - if (JOY_NEW(DPAD_LEFT)) - return 3; - if (JOY_NEW(DPAD_RIGHT)) - return 4; - if (JOY_NEW(B_BUTTON)) + return CONDITION_SEARCH_FUNC_MOVE_UP; + else if (JOY_REPEAT(DPAD_DOWN)) + return CONDITION_SEARCH_FUNC_MOVE_DOWN; + else if (JOY_NEW(DPAD_LEFT)) + return CONDITION_SEARCH_FUNC_PAGE_UP; + else if (JOY_NEW(DPAD_RIGHT)) + return CONDITION_SEARCH_FUNC_PAGE_DOWN; + else if (JOY_NEW(B_BUTTON)) { - structPtr->unk1C = 0; - structPtr->unk0 = sub_81CF0B0; - return 5; + structPtr->isPartyCondition = 0; + structPtr->callback = ReturnToConditionSearchList; + return CONDITION_SEARCH_FUNC_EXIT; } - if (JOY_NEW(A_BUTTON)) + else if (JOY_NEW(A_BUTTON)) { - structPtr->unkPtr->unk2 = GetSelectedMatchCall(); - structPtr->unk1C = 1; - structPtr->unk0 = sub_81CF0B8; - return 6; + structPtr->monList->currIndex = GetSelectedPokenavListIndex(); + structPtr->isPartyCondition = 1; + structPtr->callback = OpenConditionGraphFromSearchList; + return CONDITION_SEARCH_FUNC_SELECT_MON; } - return 0; + else + return CONDITION_SEARCH_FUNC_NONE; } -static u32 sub_81CF0B0(struct PokenavSub7 *structPtr) +static u32 ReturnToConditionSearchList(struct PokenavSub7 *structPtr) { return POKENAV_CONDITION_SEARCH_MENU; } -static u32 sub_81CF0B8(struct PokenavSub7 *structPtr) +static u32 OpenConditionGraphFromSearchList(struct PokenavSub7 *structPtr) { - return POKENAV_MENU_9; + return POKENAV_CONDITION_GRAPH_FROM_SEARCH; } static u32 sub_81CF0C0(void) { - struct PokenavSub7 *structPtr = GetSubstructPtr(7); - return structPtr->unk18; + struct PokenavSub7 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return structPtr->returnFromGraph; } -static struct PokenavMonList * sub_81CF0D0(void) +static struct PokenavMonList * GetSearchResultsMonDataList(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - return ptr->unkPtr->unk4; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return ptr->monList->monData; } -static u16 sub_81CF0E0(void) +static u16 GetSearchResultsMonListCount(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - return ptr->unkPtr->unk0; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return ptr->monList->listCount; } -static s32 sub_81CF0F0(void) +static s32 GetSearchResultsSelectedMonData(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - s32 i = GetSelectedMatchCall(); - return ptr->unkPtr->unk4[i].data; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 i = GetSelectedPokenavListIndex(); + return ptr->monList->monData[i].data; } static u16 sub_81CF10C(void) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - return ptr->unkPtr->unk2; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + return ptr->monList->currIndex; } -static u32 sub_81CF11C(s32 state) +static u32 GetConditionSearchLoopedTask(s32 state) { - return gUnknown_086233B4[state](state); + return sConditionSearchLoopedTaskFuncs[state](state); } -static u32 sub_81CF134(s32 state) +static u32 BuildPartyMonSearchResults(s32 state) { s32 i; struct PokenavMonList item; - struct PokenavSub7 * ptr = GetSubstructPtr(7); + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); - ptr->unkPtr->unk0 = 0; - ptr->unkPtr->unk2 = 0; + ptr->monList->listCount = 0; + ptr->monList->currIndex = 0; item.boxId = 14; for (i = 0; i < PARTY_SIZE; i++) { @@ -257,7 +270,7 @@ static u32 sub_81CF134(s32 state) if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG)) { item.monId = i; - item.data = GetMonData(pokemon, ptr->unk14); + item.data = GetMonData(pokemon, ptr->conditionDataId); sub_81CF2C4(ptr, &item); } } @@ -265,19 +278,19 @@ static u32 sub_81CF134(s32 state) return LT_INC_AND_CONTINUE; } -static u32 sub_81CF1C4(s32 state) +static u32 InitBoxMonSearchResults(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - ptr->unk10 = 0; - ptr->unkC = 0; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + ptr->monId = 0; + ptr->boxId = 0; return LT_INC_AND_CONTINUE; } -static u32 sub_81CF1D8(s32 state) +static u32 BuildBoxMonSearchResults(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - s32 boxId = ptr->unkC; - s32 monId = ptr->unk10; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 boxId = ptr->boxId; + s32 monId = ptr->monId; s32 boxCount = 0; struct PokenavMonList item; @@ -289,15 +302,15 @@ static u32 sub_81CF1D8(s32 state) { item.boxId = boxId; item.monId = monId; - item.data = GetBoxMonDataAt(boxId, monId, ptr->unk14); + item.data = GetBoxMonDataAt(boxId, monId, ptr->conditionDataId); sub_81CF2C4(ptr, &item); } boxCount++; monId++; if (boxCount > 14) { - ptr->unkC = boxId; - ptr->unk10 = monId; + ptr->boxId = boxId; + ptr->monId = monId; return LT_CONTINUE; } } @@ -310,108 +323,108 @@ static u32 sub_81CF1D8(s32 state) static u32 sub_81CF278(s32 state) { - struct PokenavSub7 * ptr = GetSubstructPtr(7); - s32 r6 = ptr->unkPtr->unk0; - s32 r4 = ptr->unkPtr->unk4[0].data; + struct PokenavSub7 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULTS); + s32 r6 = ptr->monList->listCount; + s32 r4 = ptr->monList->monData[0].data; s32 i; - ptr->unkPtr->unk4[0].data = 1; + ptr->monList->monData[0].data = 1; for (i = 1; i < r6; i++) { - if (ptr->unkPtr->unk4[i].data == r4) + if (ptr->monList->monData[i].data == r4) { - ptr->unkPtr->unk4[i].data = ptr->unkPtr->unk4[i - 1].data; + ptr->monList->monData[i].data = ptr->monList->monData[i - 1].data; } else { - r4 = ptr->unkPtr->unk4[i].data; - ptr->unkPtr->unk4[i].data = i + 1; + r4 = ptr->monList->monData[i].data; + ptr->monList->monData[i].data = i + 1; } } - ptr->unk18 = 1; + ptr->returnFromGraph = 1; return LT_FINISH; } static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *item) { u32 left = 0; - u32 right = structPtr->unkPtr->unk0; + u32 right = structPtr->monList->listCount; u32 insertionIdx = left + (right - left) / 2; while (right != insertionIdx) { - if (item->data > structPtr->unkPtr->unk4[insertionIdx].data) + if (item->data > structPtr->monList->monData[insertionIdx].data) right = insertionIdx; else left = insertionIdx + 1; insertionIdx = left + (right - left) / 2; } - for (right = structPtr->unkPtr->unk0; right > insertionIdx; right--) - structPtr->unkPtr->unk4[right] = structPtr->unkPtr->unk4[right - 1]; - structPtr->unkPtr->unk4[insertionIdx] = *item; - structPtr->unkPtr->unk0++; + for (right = structPtr->monList->listCount; right > insertionIdx; right--) + structPtr->monList->monData[right] = structPtr->monList->monData[right - 1]; + structPtr->monList->monData[insertionIdx] = *item; + structPtr->monList->listCount++; } -bool32 sub_81CF330(void) +bool32 OpenConditionSearchResults(void) { - struct PokenavSub8 * unk = AllocSubstruct(8, sizeof(struct PokenavSub8)); - if (unk == NULL) + struct PokenavSub8 *searchList = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, sizeof(struct PokenavSub8)); + if (searchList == NULL) return FALSE; - unk->ltid = CreateLoopedTask(sub_81CF418, 1); - unk->callback = sub_81CF3E4; - unk->unkC = FALSE; + searchList->ltid = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); + searchList->callback = GetSearchResultCurrentLoopedTaskActive; + searchList->fromGraph = FALSE; return TRUE; } -bool32 sub_81CF368(void) +bool32 OpenConditionSearchListFromGraph(void) { - struct PokenavSub8 * unk = AllocSubstruct(8, sizeof(struct PokenavSub8)); - if (unk == NULL) + struct PokenavSub8 *searchList = AllocSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST, sizeof(struct PokenavSub8)); + if (searchList == NULL) return FALSE; - unk->ltid = CreateLoopedTask(sub_81CF418, 1); - unk->callback = sub_81CF3E4; - unk->unkC = TRUE; + searchList->ltid = CreateLoopedTask(LoopedTask_OpenConditionSearchResults, 1); + searchList->callback = GetSearchResultCurrentLoopedTaskActive; + searchList->fromGraph = TRUE; return TRUE; } -void sub_81CF3A0(s32 idx) +void CreateSearchResultsLoopedTask(s32 idx) { - struct PokenavSub8 * unk = GetSubstructPtr(8); - unk->ltid = CreateLoopedTask(gUnknown_08623598[idx], 1); - unk->callback = sub_81CF3E4; + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + searchList->ltid = CreateLoopedTask(sSearchResultLoopTaskFuncs[idx], 1); + searchList->callback = GetSearchResultCurrentLoopedTaskActive; } -bool32 sub_81CF3D0(void) +bool32 IsSearchResultLoopedTaskActive(void) { - struct PokenavSub8 * unk = GetSubstructPtr(8); - return unk->callback(); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + return searchList->callback(); } -bool32 sub_81CF3E4(void) +bool32 GetSearchResultCurrentLoopedTaskActive(void) { - struct PokenavSub8 * unk = GetSubstructPtr(8); - return IsLoopedTaskActive(unk->ltid); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); + return IsLoopedTaskActive(searchList->ltid); } -void sub_81CF3F8(void) +void FreeSearchResultSubstruct2(void) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); sub_81C8234(); - RemoveWindow(unk->winid); - FreePokenavSubstruct(8); + RemoveWindow(searchList->winid); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); } -static u32 sub_81CF418(s32 state) +static u32 LoopedTask_OpenConditionSearchResults(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: - InitBgTemplates(gUnknown_08623590, NELEMS(gUnknown_08623590)); - DecompressAndCopyTileDataToVram(1, gUnknown_086233E4, 0, 0, 0); - SetBgTilemapBuffer(1, unk->buff); - CopyToBgTilemapBuffer(1, gUnknown_086234AC, 0, 0); + InitBgTemplates(sConditionSearchResultBgTemplates, NELEMS(sConditionSearchResultBgTemplates)); + DecompressAndCopyTileDataToVram(1, sConditionSearchResultTiles, 0, 0, 0); + SetBgTilemapBuffer(1, searchList->buff); + CopyToBgTilemapBuffer(1, sConditionSearchResultTilemap, 0, 0); CopyBgTilemapBufferToVram(1); - CopyPaletteIntoBufferUnfaded(gUnknown_086233C4, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(sConditionSearchResultFramePal, 0x10, 0x20); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: @@ -423,13 +436,13 @@ static u32 sub_81CF418(s32 state) case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - CopyPaletteIntoBufferUnfaded(gUnknown_08623570, 0x20, 0x20); - sub_81CF88C(); + CopyPaletteIntoBufferUnfaded(gUnknown_08623570, 0x20, 32); + InitConditionSearchListMenuTemplate(); return LT_INC_AND_PAUSE; case 3: if (sub_81C8224()) return LT_PAUSE; - sub_81CF7C8(unk); + AddSearchResultListMenuWindow(searchList); PrintHelpBarText(HELPBAR_CONDITION_MON_LIST); return LT_INC_AND_PAUSE; case 4: @@ -440,28 +453,28 @@ static u32 sub_81CF418(s32 state) ShowBg(1); ShowBg(2); HideBg(3); - if (!unk->unkC) + if (!searchList->fromGraph) { - u8 r4 = GetSelectedConditionSearch() + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; - LoadLeftHeaderGfxForIndex(r4); - sub_81C7FA0(r4, 1, 0); - sub_81C7FA0(1, 1, 0); + u8 searchGfxId = GetSelectedConditionSearch() + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; + LoadLeftHeaderGfxForIndex(searchGfxId); + ShowLeftHeaderGfx(searchGfxId, 1, 0); + ShowLeftHeaderGfx(POKENAV_GFX_CONDITION_MENU, 1, 0); } PokenavFadeScreen(1); return LT_INC_AND_PAUSE; case 5: if (IsPaletteFadeActive()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; break; } return LT_FINISH; } -static u32 sub_81CF578(s32 state) +static u32 LoopedTask_MoveSearchListCursorUp(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: @@ -478,11 +491,11 @@ static u32 sub_81CF578(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81CF7F4(unk); + PrintSearchResultListMenuItems(searchList); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -492,9 +505,9 @@ static u32 sub_81CF578(s32 state) return LT_FINISH; } -static u32 sub_81CF5F0(s32 state) +static u32 LoopedTask_MoveSearchListCursorDown(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: @@ -511,11 +524,11 @@ static u32 sub_81CF5F0(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81CF7F4(unk); + PrintSearchResultListMenuItems(searchList); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -525,9 +538,9 @@ static u32 sub_81CF5F0(s32 state) return LT_FINISH; } -static u32 sub_81CF668(s32 state) +static u32 LoopedTask_MoveSearchListPageUp(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: @@ -544,11 +557,11 @@ static u32 sub_81CF668(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81CF7F4(unk); + PrintSearchResultListMenuItems(searchList); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -558,9 +571,9 @@ static u32 sub_81CF668(s32 state) return LT_FINISH; } -static u32 sub_81CF6E0(s32 state) +static u32 LoopedTask_MoveSearchListPageDown(s32 state) { - struct PokenavSub8 * unk = GetSubstructPtr(8); + struct PokenavSub8 *searchList = GetSubstructPtr(POKENAV_SUBSTRUCT_CONDITION_SEARCH_RESULT_LIST); switch (state) { case 0: @@ -577,11 +590,11 @@ static u32 sub_81CF6E0(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81CF7F4(unk); + PrintSearchResultListMenuItems(searchList); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -591,27 +604,27 @@ static u32 sub_81CF6E0(s32 state) return LT_FINISH; } -static u32 sub_81CF758(s32 state) +static u32 LoopedTask_ExitConditionSearchMenu(s32 state) { switch (state) { case 0: PlaySE(SE_SELECT); PokenavFadeScreen(0); - sub_81C78A0(); + SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) return LT_PAUSE; if (MainMenuLoopedTaskIsBusy()) return LT_PAUSE; - sub_81C7FDC(); + SetLeftHeaderSpritesInvisibility(); break; } return LT_FINISH; } -static u32 sub_81CF798(s32 state) +static u32 LoopedTask_SelectSearchResult(s32 state) { switch (state) { @@ -627,46 +640,47 @@ static u32 sub_81CF798(s32 state) return LT_FINISH; } -static void sub_81CF7C8(struct PokenavSub8 * ptr) +static void AddSearchResultListMenuWindow(struct PokenavSub8 *searchList) { - ptr->winid = AddWindow(&gUnknown_086235B4); - PutWindowTilemap(ptr->winid); - CopyWindowToVram(ptr->winid, 1); - sub_81CF7F4(ptr); + searchList->winid = AddWindow(&sSearchResultListMenuWindowTemplate); + PutWindowTilemap(searchList->winid); + CopyWindowToVram(searchList->winid, 1); + PrintSearchResultListMenuItems(searchList); } -static void sub_81CF7F4(struct PokenavSub8 * ptr) +static void PrintSearchResultListMenuItems(struct PokenavSub8 *searchList) { - s32 r7 = sub_81CF0F0(); + s32 r7 = GetSearchResultsSelectedMonData(); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); *gStringVar1 = EOS; DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar2, gText_NumberF700); - AddTextPrinterParameterized(ptr->winid, 1, gStringVar2, 4, 1, 0xFF, NULL); + AddTextPrinterParameterized(searchList->winid, 1, gStringVar2, 4, 1, 0xFF, NULL); ConvertIntToDecimalStringN(gStringVar1, r7, STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(ptr->winid, 1, gStringVar1, 34, 1, 0xFF, NULL); - CopyWindowToVram(ptr->winid, 2); + AddTextPrinterParameterized(searchList->winid, 1, gStringVar1, 34, 1, 0xFF, NULL); + CopyWindowToVram(searchList->winid, 2); } -static void sub_81CF88C(void) +static void InitConditionSearchListMenuTemplate(void) { struct PokenavListTemplate template; - template.list.monList = sub_81CF0D0(); - template.unk4 = sub_81CF0E0(); + + template.list.monList = GetSearchResultsMonDataList(); + template.count = GetSearchResultsMonListCount(); template.unk8 = 4; template.unk6 = sub_81CF10C(); - template.unk9 = 13; - template.unkA = 17; - template.unkB = 1; - template.unkC = 8; - template.unkD = 2; - template.unkE = 1; - template.listFunc.unk10_1 = sub_81CF8E4; + template.item_X = 13; + template.windowWidth = 17; + template.listTop = 1; + template.maxShowed = 8; + template.fillValue = 2; + template.fontId = 1; + template.listFunc.printMonFunc = PrintSearchMonListItem; template.unk14 = NULL; - sub_81C81D4(&gUnknown_08623590[1], &template, 0); + sub_81C81D4(&sConditionSearchResultBgTemplates[1], &template, 0); } -static void sub_81CF8E4(struct PokenavMonList * item, u8 * dest) +static void PrintSearchMonListItem(struct PokenavMonList * item, u8 * dest) { u8 gender; u8 level; diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index f2b9b0dcca..009cf783f7 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -15,9 +15,9 @@ struct PokenavMainMenuResources { - void (*unk0)(u32); - u32 (*unk4)(void); - u32 unk8; + void (*loopTask)(u32); + u32 (*isLoopTaskActiveFunc)(void); + u32 unused; u32 currentTaskId; u32 helpBarWindowId; u32 palettes; @@ -47,8 +47,8 @@ static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); static void InitPokenavMainMenuResources(void); static void InitHoennMapHeaderSprites(void); static void InitHelpBar(void); -static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0); -static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0); +static u32 LoopedTask_SlideMenuHeaderUp(s32 a0); +static u32 LoopedTask_SlideMenuHeaderDown(s32 a0); static void DrawHelpBar(u32 windowId); static void SpriteCB_SpinningPokenav(struct Sprite* sprite); static u32 LoopedTask_InitPokenavMenu(s32 a0); @@ -294,7 +294,7 @@ bool32 InitPokenavMainMenu(void) { struct PokenavMainMenuResources *structPtr; - structPtr = AllocSubstruct(0, sizeof(struct PokenavMainMenuResources)); + structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU, sizeof(struct PokenavMainMenuResources)); if (structPtr == NULL) return FALSE; @@ -306,14 +306,14 @@ bool32 InitPokenavMainMenu(void) u32 PokenavMainMenuLoopedTaskIsActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); return IsLoopedTaskActive(structPtr->currentTaskId); } void ShutdownPokenav(void) { PlaySE(SE_POKENAV_OFF); - sub_81CAADC(); + ResetBldCnt_(); BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); } @@ -345,7 +345,7 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) ResetTempTileDataBuffers(); return LT_INC_AND_CONTINUE; case 1: - structPtr = GetSubstructPtr(0); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DecompressAndCopyTileDataToVram(0, &gPokenavHeader_Gfx, 0, 0, 0); SetBgTilemapBuffer(0, structPtr->tilemapBuffer); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); @@ -371,46 +371,46 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0) } } -void sub_81C7834(void *func1, void *func2) // Fix types later. +void SetActiveMenuLoopTasks(void *createLoopTask, void *isLoopTaskActive) // Fix types later. { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->unk0 = func1; - structPtr->unk4 = func2; - structPtr->unk8 = 0; + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->loopTask = createLoopTask; + structPtr->isLoopTaskActiveFunc = isLoopTaskActive; + structPtr->unused = 0; } -void sub_81C7850(u32 a0) +void RunMainMenuLoopedTask(u32 a0) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->unk8 = 0; - structPtr->unk0(a0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->unused = 0; + structPtr->loopTask(a0); } -u32 sub_81C786C(void) +u32 IsActiveMenuLoopTaskActive(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - return structPtr->unk4(); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + return structPtr->isLoopTaskActiveFunc(); } -void sub_81C7880(void) +void SlideMenuHeaderUp(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_ScrollMenuHeaderDown, 4); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderUp, 4); } -void sub_81C78A0(void) +void SlideMenuHeaderDown(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - structPtr->currentTaskId = CreateLoopedTask(LoopedTask_ScrollMenuHeaderUp, 4); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); + structPtr->currentTaskId = CreateLoopedTask(LoopedTask_SlideMenuHeaderDown, 4); } bool32 MainMenuLoopedTaskIsBusy(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); return IsLoopedTaskActive(structPtr->currentTaskId); } -static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0) +static u32 LoopedTask_SlideMenuHeaderUp(s32 a0) { switch (a0) { @@ -431,14 +431,13 @@ static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0) } } -static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) +static u32 LoopedTask_SlideMenuHeaderDown(s32 a0) { if (ChangeBgY(0, 384, 2) <= 0) { ChangeBgY(0, 0, 0); return LT_FINISH; } - return LT_PAUSE; } @@ -459,41 +458,43 @@ void Pokenav_AllocAndLoadPalettes(const struct SpritePalette *palettes) { break; } - - index = (index * 16) + 0x100; - CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); + else + { + index = (index * 16) + 0x100; + CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); + } } } -void sub_81C7990(u32 a0, u16 a1) +void PokenavFillPalette(u32 palIndex, u16 fillValue) { - CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); + CpuFill16(fillValue, gPlttBufferFaded + 0x100 + (palIndex * 16), 16 * sizeof(u16)); } -void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *palette) +void PokenavCopyPalette(const u16 *src, const u16 *dest, int size, int a3, int a4, u16 *palette) { if (a4 == 0) { - CpuCopy16(a0, palette, a2 * 2); + CpuCopy16(src, palette, size * 2); } else if (a4 >= a3) { - CpuCopy16(a1, palette, a2 * 2); + CpuCopy16(dest, palette, size * 2); } else { int r, g, b; int r1, g1, b1; - while (a2--) + while (size--) { - r = GET_R(*a0); - g = GET_G(*a0); - b = GET_B(*a0); + r = GET_R(*src); + g = GET_G(*src); + b = GET_B(*src); - r1 = ((((GET_R(*a1) << 8) - (r << 8)) / a3) * a4) >> 8; - g1 = ((((GET_G(*a1) << 8) - (g << 8)) / a3) * a4) >> 8; - b1 = ((((GET_B(*a1) << 8) - (b << 8)) / a3) * a4) >> 8; + r1 = ((((GET_R(*dest) << 8) - (r << 8)) / a3) * a4) >> 8; + g1 = ((((GET_G(*dest) << 8) - (g << 8)) / a3) * a4) >> 8; + b1 = ((((GET_B(*dest) << 8) - (b << 8)) / a3) * a4) >> 8; r = (r + r1) & 0x1F; //_RGB(r + r1, g + g1, b + b1); doesn't match; I have to assign the value of ((r + r1) & 0x1F) to r1 g = (g + g1) & 0x1F; //See above @@ -501,7 +502,7 @@ void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *pale *palette = RGB2(r, g, b); //See above comment - a0++, a1++; + src++, dest++; palette++; } } @@ -509,7 +510,7 @@ void sub_81C79BC(const u16 *a0, const u16 *a1, int a2, int a3, int a4, u16 *pale void PokenavFadeScreen(s32 fadeType) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); switch (fadeType) { @@ -548,7 +549,7 @@ void InitBgTemplates(const struct BgTemplate *templates, int count) static void InitHelpBar(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); InitWindows(&sHelpBarWindowTemplate[0]); structPtr->helpBarWindowId = 0; @@ -559,7 +560,7 @@ static void InitHelpBar(void) void PrintHelpBarText(u32 textId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DrawHelpBar(structPtr->helpBarWindowId); AddTextPrinterParameterized3(structPtr->helpBarWindowId, 1, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]); @@ -580,7 +581,7 @@ static void InitPokenavMainMenuResources(void) { s32 i; u8 spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); for (i = 0; i < ARRAY_COUNT(gSpinningPokenavSpriteSheet); i++) LoadCompressedSpriteSheet(&gSpinningPokenavSpriteSheet[i]); @@ -593,7 +594,7 @@ static void InitPokenavMainMenuResources(void) static void CleanupPokenavMainMenuResources(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); DestroySprite(structPtr->spinningPokenav); FreeSpriteTilesByTag(0); @@ -608,7 +609,7 @@ static void SpriteCB_SpinningPokenav(struct Sprite *sprite) struct Sprite *PauseSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); structPtr->spinningPokenav->callback = SpriteCallbackDummy; return structPtr->spinningPokenav; @@ -616,7 +617,7 @@ struct Sprite *PauseSpinningPokenavSprite(void) void ResumeSpinningPokenavSprite(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); structPtr->spinningPokenav->pos1.x = 220; structPtr->spinningPokenav->pos1.y = 12; @@ -629,7 +630,7 @@ void ResumeSpinningPokenavSprite(void) static void InitHoennMapHeaderSprites(void) { s32 i, spriteId; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); AllocSpritePalette(1); @@ -658,9 +659,9 @@ void LoadLeftHeaderGfxForIndex(u32 menuGfxId) LoadLeftHeaderGfxForSubMenu(menuGfxId - POKENAV_GFX_SUBMENUS_START); } -void sub_81C7E14(u32 menuGfxId) +void UpdateRegionMapRightHeaderTiles(u32 menuGfxId) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (menuGfxId == POKENAV_GFX_MAP_MENU_ZOOMED_OUT) structPtr->leftHeaderSprites[1]->oam.tileNum = GetSpriteTileStartByTag(2) + 32; @@ -676,7 +677,7 @@ static void LoadLeftHeaderGfxForMenu(u32 menuGfxId) if (menuGfxId >= POKENAV_GFX_SUBMENUS_START) return; - structPtr = GetSubstructPtr(0); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); tag = sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].tag; size = GetDecompressedDataSize(sPokenavMenuLeftHeaderSpriteSheets[menuGfxId].data); LoadPalette(&gPokenavLeftHeader_Pal[tag * 16], (IndexOfSpritePaletteTag(1) * 16) + 0x100, 0x20); @@ -704,33 +705,33 @@ static void LoadLeftHeaderGfxForSubMenu(u32 menuGfxId) RequestDma3Copy(&gDecompressionBuffer[0x1000], (void *)VRAM + 0x10800 + (GetSpriteTileStartByTag(2) * 32), size, 1); } -void sub_81C7FA0(u32 menuGfxId, bool32 arg1, bool32 arg2) +void ShowLeftHeaderGfx(u32 menuGfxId, bool32 isMain, bool32 isOnRightSide) { - u32 var; + u32 tileTop; - if (!arg1) - var = 0x30; + if (!isMain) + tileTop = 0x30; else - var = 0x10; + tileTop = 0x10; if (menuGfxId < POKENAV_GFX_SUBMENUS_START) - ShowLeftHeaderSprites(var, arg2); + ShowLeftHeaderSprites(tileTop, isOnRightSide); else - ShowLeftHeaderSubmenuSprites(var, arg2); + ShowLeftHeaderSubmenuSprites(tileTop, isOnRightSide); } -void sub_81C7FC4(u32 arg0, bool32 arg1) +void HideMainOrSubMenuLeftHeader(u32 id, bool32 onRightSide) { - if (arg0 < 6) - HideLeftHeaderSprites(arg1); + if (id < POKENAV_GFX_PARTY_MENU) + HideLeftHeaderSprites(onRightSide); else - HideLeftHeaderSubmenuSprites(arg1); + HideLeftHeaderSubmenuSprites(onRightSide); } -void sub_81C7FDC(void) +void SetLeftHeaderSpritesInvisibility(void) { s32 i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { @@ -739,9 +740,9 @@ void sub_81C7FDC(void) } } -bool32 sub_81C8010(void) +bool32 AreLeftHeaderSpritesMoving(void) { - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (structPtr->leftHeaderSprites[0]->callback == SpriteCallbackDummy && structPtr->submenuLeftHeaderSprites[0]->callback == SpriteCallbackDummy) return FALSE; @@ -752,7 +753,7 @@ bool32 sub_81C8010(void) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 32; @@ -769,7 +770,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = -96, end = 16; @@ -786,7 +787,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) static void HideLeftHeaderSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 32, end = -96; @@ -802,7 +803,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide) static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) { s32 start, end, i; - struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); + struct PokenavMainMenuResources *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU); if (!isOnRightSide) start = 16, end = -96; diff --git a/src/pokenav_match_call_1.c b/src/pokenav_match_call_1.c index d919a4dbf8..fb44aaa876 100755 --- a/src/pokenav_match_call_1.c +++ b/src/pokenav_match_call_1.c @@ -53,7 +53,7 @@ static const u8 sMatchCallOptionsHasCheckPage[] = bool32 PokenavCallback_Init_MatchCall(void) { - struct Pokenav3Struct *state = AllocSubstruct(5, sizeof(struct Pokenav3Struct)); + struct Pokenav3Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN, sizeof(struct Pokenav3Struct)); if (!state) return FALSE; @@ -66,13 +66,13 @@ bool32 PokenavCallback_Init_MatchCall(void) u32 GetMatchCallCallback(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->callback(state); } void FreeMatchCallSubstruct1(void) { - FreePokenavSubstruct(5); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); } static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) @@ -92,7 +92,7 @@ static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state) { state->callback = CB2_HandleMatchCallOptionsInput; state->optionCursorPos = 0; - selection = GetSelectedMatchCall(); + selection = GetSelectedPokenavListIndex(); if (!state->matchCallEntries[selection].isSpecialTrainer || MatchCall_HasCheckPage(state->matchCallEntries[selection].headerId)) { @@ -205,7 +205,7 @@ static u32 CB2_HandleCallInput(struct Pokenav3Struct *state) static u32 sub_81CAD20(s32 taskState) { int i, j; - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); switch (taskState) { case 0: @@ -239,7 +239,7 @@ static u32 sub_81CAD20(s32 taskState) { state->matchCallEntries[state->numRegistered].headerId = state->headerId; state->matchCallEntries[state->numRegistered].isSpecialTrainer = FALSE; - state->matchCallEntries[state->numRegistered].mapSec = sub_81CB0C8(j); + state->matchCallEntries[state->numRegistered].mapSec = GetMatchTableMapSectionId(j); state->numRegistered++; } @@ -266,31 +266,31 @@ bool32 IsRematchEntryRegistered(int rematchIndex) int sub_81CAE28(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->unk10; } int GetNumberRegistered(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->numRegistered; } int sub_81CAE48(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->unkC; } int unref_sub_81CAE58(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->numRegistered - state->unkC; } int unref_sub_81CAE6C(int arg0) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); arg0 += state->unkC; if (arg0 >= state->numRegistered) return REMATCH_TABLE_ENTRIES; @@ -300,19 +300,19 @@ int unref_sub_81CAE6C(int arg0) struct PokenavMatchCallEntries *sub_81CAE94(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->matchCallEntries; } u16 GetMatchCallMapSec(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->matchCallEntries[index].mapSec; } bool32 ShouldDrawRematchPokeballIcon(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (!state->matchCallEntries[index].isSpecialTrainer) index = state->matchCallEntries[index].headerId; else @@ -327,7 +327,7 @@ bool32 ShouldDrawRematchPokeballIcon(int index) int GetMatchCallTrainerPic(int index) { int headerId; - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (!state->matchCallEntries[index].isSpecialTrainer) { index = GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId); @@ -348,7 +348,7 @@ int GetMatchCallTrainerPic(int index) const u8 *GetMatchCallMessageText(int index, u8 *arg1) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); *arg1 = 0; if (!Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType)) return gText_CallCantBeMadeHere; @@ -364,7 +364,7 @@ const u8 *GetMatchCallMessageText(int index, u8 *arg1) const u8 *GetMatchCallFlavorText(int index, int checkPageEntry) { int rematchId; - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (state->matchCallEntries[index].isSpecialTrainer) { rematchId = MatchCall_GetRematchTableIdx(state->matchCallEntries[index].headerId); @@ -381,13 +381,13 @@ const u8 *GetMatchCallFlavorText(int index, int checkPageEntry) u16 GetMatchCallOptionCursorPos(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); return state->optionCursorPos; } u16 GetMatchCallOptionId(int optionId) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); if (state->maxOptionId < optionId) return MATCH_CALL_OPTION_COUNT; @@ -422,7 +422,7 @@ void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries *matchCallEntry, } } -u8 sub_81CB0C8(int rematchIndex) +u8 GetMatchTableMapSectionId(int rematchIndex) { int mapGroup = gRematchTable[rematchIndex].mapGroup; int mapNum = gRematchTable[rematchIndex].mapNum; @@ -431,7 +431,7 @@ u8 sub_81CB0C8(int rematchIndex) int GetIndexDeltaOfNextCheckPageDown(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); int count = 1; while (++index < state->numRegistered) { @@ -448,7 +448,7 @@ int GetIndexDeltaOfNextCheckPageDown(int index) int GetIndexDeltaOfNextCheckPageUp(int index) { - struct Pokenav3Struct *state = GetSubstructPtr(5); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); int count = -1; while (--index >= 0) { @@ -488,8 +488,8 @@ bool32 unref_sub_81CB16C(void) static bool32 sub_81CB1D0(void) { - struct Pokenav3Struct *state = GetSubstructPtr(5); - int selection = GetSelectedMatchCall(); + struct Pokenav3Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_MAIN); + int selection = GetSelectedPokenavListIndex(); if (!state->matchCallEntries[selection].isSpecialTrainer) { if (GetMatchCallMapSec(selection) == gMapHeader.regionMapSectionId) diff --git a/src/pokenav_match_call_2.c b/src/pokenav_match_call_2.c index 4248826702..adcd889d37 100755 --- a/src/pokenav_match_call_2.c +++ b/src/pokenav_match_call_2.c @@ -23,7 +23,6 @@ #include "constants/game_stat.h" #include "constants/region_map_sections.h" #include "constants/songs.h" -#include "constants/species.h" struct Pokenav4Struct { @@ -37,7 +36,7 @@ struct Pokenav4Struct u16 msgBoxWindowId; s16 unk16; u8 unused18; - u8 unk19; + u8 unused19; u16 unk1A; struct Sprite *optionsCursorSprite; struct Sprite *trainerPicSprite; @@ -51,9 +50,9 @@ struct Pokenav4Struct static bool32 GetCurrentLoopedTaskActive(void); static u32 LoopedTask_OpenMatchCall(s32); -static void sub_81CBBB8(void); +static void InitMatchCallPokenavListMenuTemplate(void); static void sub_81CBC1C(void); -static void sub_81CC2B4(void); +static void RemoveMatchCallSprites(void); static void sub_81CC034(struct Pokenav4Struct *); static void DrawMatchCallLeftColumnWindows(struct Pokenav4Struct *); static void UpdateMatchCallInfoBox(struct Pokenav4Struct *); @@ -120,7 +119,7 @@ static const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbap static const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal"); static const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz"); -const struct BgTemplate gUnknown_0862278C[3] = +const struct BgTemplate sMatchCallBgTemplates[3] = { { .bg = 1, @@ -153,22 +152,22 @@ const struct BgTemplate gUnknown_0862278C[3] = static const LoopedTask sMatchCallLoopTaskFuncs[] = { - [POKENAV_MC_FUNC_NONE] = NULL, - [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown, - [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp, - [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown, - [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp, - [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry, + [POKENAV_MC_FUNC_NONE] = NULL, + [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown, + [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp, + [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown, + [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp, + [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry, [POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR] = MoveMatchCallOptionsCursor, - [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection, - [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage, - [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage, - [POKENAV_MC_FUNC_10] = sub_81CB888, - [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage, - [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp, - [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown, - [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage, - [POKENAV_MC_FUNC_EXIT] = ExitMatchCall + [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection, + [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage, + [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage, + [POKENAV_MC_FUNC_10] = sub_81CB888, + [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage, + [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp, + [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown, + [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage, + [POKENAV_MC_FUNC_EXIT] = ExitMatchCall }; static const struct WindowTemplate sMatchCallLocationWindowTemplate = @@ -276,11 +275,11 @@ static const struct SpriteTemplate sTrainerPicSpriteTemplate = bool32 OpenMatchCall(void) { - struct Pokenav4Struct *state = AllocSubstruct(6, sizeof(struct Pokenav4Struct)); + struct Pokenav4Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN, sizeof(struct Pokenav4Struct)); if (!state) return FALSE; - state->unk19 = 0; + state->unused19 = 0; state->loopTaskId = CreateLoopedTask(LoopedTask_OpenMatchCall, 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; return TRUE; @@ -288,21 +287,21 @@ bool32 OpenMatchCall(void) void CreateMatchCallLoopedTask(s32 index) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); state->loopTaskId = CreateLoopedTask(sMatchCallLoopTaskFuncs[index], 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsMatchCallLoopedTaskActive(void) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); return state->isTaskActiveCB(); } void FreeMatchCallSubstruct2(void) { - struct Pokenav4Struct *state = GetSubstructPtr(6); - sub_81CC2B4(); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); + RemoveMatchCallSprites(); sub_81CBC1C(); RemoveWindow(state->infoBoxWindowId); RemoveWindow(state->locWindowId); @@ -312,17 +311,17 @@ void FreeMatchCallSubstruct2(void) static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); return IsLoopedTaskActive(state->loopTaskId); } static u32 LoopedTask_OpenMatchCall(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: - InitBgTemplates(gUnknown_0862278C, ARRAY_COUNT(gUnknown_0862278C)); + InitBgTemplates(sMatchCallBgTemplates, ARRAY_COUNT(sMatchCallBgTemplates)); ChangeBgX(2, 0, 0); ChangeBgY(2, 0, 0); DecompressAndCopyTileDataToVram(2, sMatchCallUI_Gfx, 0, 0, 0); @@ -355,7 +354,7 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState) if (FreeTempTileDataBuffersIfPossible() || !sub_81CAE28()) return LT_PAUSE; - sub_81CBBB8(); + InitMatchCallPokenavListMenuTemplate(); return LT_INC_AND_PAUSE; case 4: if (sub_81C8224()) @@ -375,11 +374,11 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState) ShowBg(1); sub_81CC214(); LoadLeftHeaderGfxForIndex(3); - sub_81C7FA0(3, 1, 0); + ShowLeftHeaderGfx(POKENAV_GFX_MATCH_CALL_MENU, 1, 0); PokenavFadeScreen(1); return LT_INC_AND_PAUSE; case 7: - if (IsPaletteFadeActive() || sub_81C8010()) + if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) return LT_PAUSE; sub_81CBC38(1); @@ -391,7 +390,7 @@ static u32 LoopedTask_OpenMatchCall(s32 taskState) u32 MatchCallListCursorDown(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -410,7 +409,7 @@ u32 MatchCallListCursorDown(s32 taskState) } break; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; PrintMatchCallLocation(state, 0); @@ -428,7 +427,7 @@ u32 MatchCallListCursorDown(s32 taskState) u32 MatchCallListCursorUp(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -447,7 +446,7 @@ u32 MatchCallListCursorUp(s32 taskState) } break; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; PrintMatchCallLocation(state, 0); @@ -465,7 +464,7 @@ u32 MatchCallListCursorUp(s32 taskState) u32 MatchCallListPageDown(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -484,7 +483,7 @@ u32 MatchCallListPageDown(s32 taskState) } break; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; PrintMatchCallLocation(state, 0); @@ -502,7 +501,7 @@ u32 MatchCallListPageDown(s32 taskState) u32 MatchCallListPageUp(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -521,7 +520,7 @@ u32 MatchCallListPageUp(s32 taskState) } break; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; PrintMatchCallLocation(state, 0); @@ -539,7 +538,7 @@ u32 MatchCallListPageUp(s32 taskState) u32 SelectMatchCallEntry(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -562,7 +561,7 @@ u32 MoveMatchCallOptionsCursor(s32 taskState) u16 cursorPos; PlaySE(SE_SELECT); - state = GetSubstructPtr(6); + state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); cursorPos = GetMatchCallOptionCursorPos(); UpdateCursorGfxPos(state, cursorPos); return LT_FINISH; @@ -570,7 +569,7 @@ u32 MoveMatchCallOptionsCursor(s32 taskState) u32 CancelMatchCallSelection(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -589,7 +588,7 @@ u32 CancelMatchCallSelection(s32 taskState) u32 DoMatchCallMessage(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -621,7 +620,7 @@ u32 DoMatchCallMessage(s32 taskState) u32 DoTrainerCloseByMessage(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -647,7 +646,7 @@ u32 DoTrainerCloseByMessage(s32 taskState) u32 sub_81CB888(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); u32 result = LT_INC_AND_PAUSE; switch (taskState) @@ -711,7 +710,7 @@ u32 sub_81CB888(s32 taskState) u32 ShowCheckPage(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -720,7 +719,7 @@ u32 ShowCheckPage(s32 taskState) UpdateWindowsToShowCheckPage(state); return LT_INC_AND_PAUSE; case 1: - if (sub_81C8820() || IsDma3ManagerBusyWithBgCopy1(state)) + if (IsMatchCallListTaskActive() || IsDma3ManagerBusyWithBgCopy1(state)) return LT_PAUSE; PrintHelpBarText(HELPBAR_MC_CHECK_PAGE); @@ -730,7 +729,7 @@ u32 ShowCheckPage(s32 taskState) LoadCheckPageTrainerPic(state); return LT_INC_AND_PAUSE; case 3: - if (sub_81C8820() || WaitForTrainerPic(state) || WaitForHelpBar()) + if (IsMatchCallListTaskActive() || WaitForTrainerPic(state) || WaitForHelpBar()) return LT_PAUSE; break; } @@ -742,7 +741,7 @@ u32 ShowCheckPageDown(s32 taskState) { int topId; int delta; - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -769,7 +768,7 @@ u32 ShowCheckPageDown(s32 taskState) LoadCheckPageTrainerPic(state); return LT_INC_AND_PAUSE; case 4: - if (sub_81C8820() || WaitForTrainerPic(state)) + if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) return LT_PAUSE; break; } @@ -779,7 +778,7 @@ u32 ShowCheckPageDown(s32 taskState) u32 ExitCheckPage(s32 taskState) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -788,7 +787,7 @@ u32 ExitCheckPage(s32 taskState) sub_81C87F0(); return LT_INC_AND_PAUSE; case 1: - if (sub_81C8820() || WaitForTrainerPic(state)) + if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) return LT_PAUSE; PrintHelpBarText(HELPBAR_MC_TRAINER_LIST); @@ -807,7 +806,7 @@ u32 ShowCheckPageUp(s32 taskState) { int topId; int delta; - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); switch (taskState) { case 0: @@ -834,7 +833,7 @@ u32 ShowCheckPageUp(s32 taskState) LoadCheckPageTrainerPic(state); return LT_INC_AND_PAUSE; case 4: - if (sub_81C8820() || WaitForTrainerPic(state)) + if (IsMatchCallListTaskActive() || WaitForTrainerPic(state)) return LT_PAUSE; break; } @@ -850,35 +849,35 @@ u32 ExitMatchCall(s32 taskState) PlaySE(SE_SELECT); sub_81CBC38(0); PokenavFadeScreen(0); - sub_81C78A0(); + SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) return LT_PAUSE; - sub_81C7FDC(); + SetLeftHeaderSpritesInvisibility(); break; } return LT_FINISH; } -static void sub_81CBBB8(void) +static void InitMatchCallPokenavListMenuTemplate(void) { struct PokenavListTemplate template; template.list.matchCallEntries = sub_81CAE94(); - template.unk4 = GetNumberRegistered(); + template.count = GetNumberRegistered(); template.unk8 = 4; template.unk6 = 0; - template.unk9 = 13; - template.unkA = 16; - template.unkB = 1; - template.unkC = 8; - template.unkD = 3; - template.unkE = 7; + template.item_X = 13; + template.windowWidth = 16; + template.listTop = 1; + template.maxShowed = 8; + template.fillValue = 3; + template.fontId = 7; template.listFunc.unk10_2 = BufferMatchCallNameAndDesc; template.unk14 = TryDrawRematchPokeballIcon; - sub_81C81D4(&gUnknown_0862278C[2], &template, 2); + sub_81C81D4(&sMatchCallBgTemplates[2], &template, 2); CreateTask(sub_81CBC64, 7); } @@ -903,7 +902,7 @@ static void sub_81CBC64(u8 taskId) taskData[0] += 4; taskData[0] &= 0x7F; taskData[1] = gSineTable[taskData[0]] >> 4; - sub_81C79BC(gUnknown_08622720, gUnknown_08622720 + 0x10, 0x10, 0x10, taskData[1], gPlttBufferUnfaded + 0x50); + PokenavCopyPalette(gUnknown_08622720, gUnknown_08622720 + 0x10, 0x10, 0x10, taskData[1], gPlttBufferUnfaded + 0x50); if (!gPaletteFade.active) CpuCopy32(gPlttBufferUnfaded + 0x50, gPlttBufferFaded + 0x50, 0x20); } @@ -1001,7 +1000,7 @@ static void PrintMatchCallLocation(struct Pokenav4Struct *state, int arg1) { u8 mapName[32]; int x; - int index = GetSelectedMatchCall() + arg1; + int index = GetSelectedPokenavListIndex() + arg1; int mapSec = GetMatchCallMapSec(index); if (mapSec != MAPSEC_NONE) GetMapName(mapName, mapSec, 0); @@ -1118,7 +1117,7 @@ static bool32 WaitForTrainerIsCloseByText(struct Pokenav4Struct *state) static void PrintMatchCallMessage(struct Pokenav4Struct *state) { - int index = GetSelectedMatchCall(); + int index = GetSelectedPokenavListIndex(); const u8 *str = GetMatchCallMessageText(index, &state->unkF); u8 speed = GetPlayerTextSpeedDelay(); AddTextPrinterParameterized(state->msgBoxWindowId, 1, str, 32, 1, speed, NULL); @@ -1152,7 +1151,7 @@ static void sub_81CC214(void) int i; u8 paletteNum; struct SpriteSheet spriteSheet; - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); for (i = 0; i < ARRAY_COUNT(gUnknown_08622810); i++) LoadCompressedSpriteSheet(&gUnknown_08622810[i]); @@ -1169,9 +1168,9 @@ static void sub_81CC214(void) state->trainerPicSprite->invisible = TRUE; } -static void sub_81CC2B4(void) +static void RemoveMatchCallSprites(void) { - struct Pokenav4Struct *state = GetSubstructPtr(6); + struct Pokenav4Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_OPEN); if (state->optionsCursorSprite) DestroySprite(state->optionsCursorSprite); if (state->trainerPicSprite) @@ -1222,7 +1221,7 @@ static struct Sprite *CreateTrainerPicSprite(void) static void LoadCheckPageTrainerPic(struct Pokenav4Struct *state) { u16 cursor; - int trainerPic = GetMatchCallTrainerPic(GetSelectedMatchCall()); + int trainerPic = GetMatchCallTrainerPic(GetSelectedPokenavListIndex()); if (trainerPic >= 0) { DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], state->unk1828, SPECIES_NONE); diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index 91dbe40056..6610dcb803 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -1100,16 +1100,9 @@ const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset) { if (sCheckPageOverrides[i].idx == idx) { - while (1) - { - if (i + 1 >= ARRAY_COUNT(sCheckPageOverrides)) - break; - if (sCheckPageOverrides[i + 1].idx != idx) - break; - if (!FlagGet(sCheckPageOverrides[i + 1].flag)) - break; - i++; - } + for (; i + 1 < ARRAY_COUNT(sCheckPageOverrides) && + sCheckPageOverrides[i + 1].idx == idx && + FlagGet(sCheckPageOverrides[i + 1].flag); i++); return sCheckPageOverrides[i].flavorTexts[offset]; } } diff --git a/src/pokenav_match_call_ui.c b/src/pokenav_match_call_ui.c index 01740fccec..2d89f9c39b 100644 --- a/src/pokenav_match_call_ui.c +++ b/src/pokenav_match_call_ui.c @@ -9,7 +9,7 @@ // TODO: This UI isnt just for match call, seems to be the general pokenav list UI -struct UnknownSubSubStruct_0203CF40 { +struct PokenavListMenuWindow { u8 bg; u8 unk1; u8 unk2; @@ -38,14 +38,14 @@ struct MatchCallWindowState { struct PokenavSub17Substruct { - struct UnknownSubSubStruct_0203CF40 unk0; + struct PokenavListMenuWindow listWindow; u32 unk10; u32 unk14; u32 unk18; void * unk1C; s32 unk20; s32 unk24; - u32 unk28; + u32 loopedTaskId; s32 unk2C; u32 unk30; void (*unk34)(struct PokenavMatchCallEntries *, u8*); @@ -59,34 +59,34 @@ struct PokenavSub17Substruct // Generally at index 0x11 (17) struct PokenavSub17 { - struct PokenavSub17Substruct unk0; + struct PokenavSub17Substruct list; u8 tilemapBuffer[0x800]; struct MatchCallWindowState unk888; s32 unk89C; - u32 unk8A0; + u32 loopedTaskId; }; extern void sub_81DB620(u32 windowId, u32 a1, u32 a2, u32 a3, u32 a4); -void sub_81C82E4(struct PokenavSub17 *a0); -bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3); -void sub_81C9160(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1); +void sub_81C82E4(struct PokenavSub17 *matchCall); +bool32 CopyPokenavListMenuTemplate(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3); +void InitMatchCallWindowState(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1); void SpriteCB_MatchCallUpArrow(struct Sprite *sprite); void SpriteCB_MatchCallDownArrow(struct Sprite *sprite); void SpriteCB_MatchCallRightArrow(struct Sprite *sprite); void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, u32 a1); -void sub_81C8FE0(struct PokenavSub17Substruct *a0); -void sub_81C8EF8(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); +void DestroyMatchCallListArrows(struct PokenavSub17Substruct *a0); +void CreateMatchCallArrowSprites(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); void sub_81C8ED0(void); static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2); void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 a1); void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2); +void sub_81C8B70(struct PokenavListMenuWindow *a0, s32 a1, s32 a2); void sub_81C8568(s32 a0, struct PokenavSub17Substruct *a1); void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *a5); void sub_81C837C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1); -void sub_81C835C(struct UnknownSubSubStruct_0203CF40 *a0); +void sub_81C835C(struct PokenavListMenuWindow *a0); u32 LoopedTask_sub_81C8254(s32 state); bool32 sub_81C83E0(void); u32 LoopedTask_sub_81C83F0(s32 state); @@ -102,12 +102,12 @@ EWRAM_DATA u32 gUnknown_0203CF44 = 0; bool32 sub_81C81D4(const struct BgTemplate *arg0, struct PokenavListTemplate *arg1, s32 arg2) { - struct PokenavSub17 *structPtr = AllocSubstruct(17, sizeof(struct PokenavSub17)); + struct PokenavSub17 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_LIST, sizeof(struct PokenavSub17)); if (structPtr == NULL) return FALSE; - sub_81C9160(&structPtr->unk888, arg1); - if (!sub_81C91AC(&structPtr->unk0, arg0, arg1, arg2)) + InitMatchCallWindowState(&structPtr->unk888, arg1); + if (!CopyPokenavListMenuTemplate(&structPtr->list, arg0, arg1, arg2)) return FALSE; CreateLoopedTask(LoopedTask_sub_81C8254, 6); @@ -123,10 +123,10 @@ void sub_81C8234(void) { struct PokenavSub17 *structPtr; - structPtr = GetSubstructPtr(17); - sub_81C8FE0(&structPtr->unk0); - RemoveWindow(structPtr->unk0.unk0.windowId); - FreePokenavSubstruct(17); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + DestroyMatchCallListArrows(&structPtr->list); + RemoveWindow(structPtr->list.listWindow.windowId); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); } u32 LoopedTask_sub_81C8254(s32 state) @@ -134,9 +134,9 @@ u32 LoopedTask_sub_81C8254(s32 state) struct PokenavSub17 *structPtr; if (IsDma3ManagerBusyWithBgCopy()) - return 2; + return LT_PAUSE; - structPtr = GetSubstructPtr(17); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); switch (state) { @@ -144,10 +144,10 @@ u32 LoopedTask_sub_81C8254(s32 state) sub_81C82E4(structPtr); return LT_INC_AND_PAUSE; case 1: - sub_81C835C(&structPtr->unk0.unk0); + sub_81C835C(&structPtr->list.listWindow); return LT_INC_AND_PAUSE; case 2: - sub_81C837C(&structPtr->unk888, &structPtr->unk0); + sub_81C837C(&structPtr->unk888, &structPtr->list); return LT_INC_AND_PAUSE; case 3: if (sub_81C83E0()) @@ -160,53 +160,53 @@ u32 LoopedTask_sub_81C8254(s32 state) return LT_INC_AND_CONTINUE; } case 4: - sub_81C8EF8(&structPtr->unk888, &structPtr->unk0); + CreateMatchCallArrowSprites(&structPtr->unk888, &structPtr->list); return LT_FINISH; default: return LT_FINISH; } } -void sub_81C82E4(struct PokenavSub17 *a0) +void sub_81C82E4(struct PokenavSub17 *matchCall) { - u16 tileNum = (a0->unk0.unk0.unk1 << 12) | a0->unk0.unk0.unk6; - sub_8199DF0(a0->unk0.unk0.bg, PIXEL_FILL(1), a0->unk0.unk0.unk6, 1); - sub_8199DF0(a0->unk0.unk0.bg, PIXEL_FILL(4), a0->unk0.unk0.unk6 + 1, 1); - SetBgTilemapBuffer(a0->unk0.unk0.bg, a0->tilemapBuffer); - FillBgTilemapBufferRect_Palette0(a0->unk0.unk0.bg, tileNum, 0, 0, 32, 32); - ChangeBgY(a0->unk0.unk0.bg, 0, 0); - ChangeBgX(a0->unk0.unk0.bg, 0, 0); - ChangeBgY(a0->unk0.unk0.bg, a0->unk0.unk0.unk3 << 11, 2); - CopyBgTilemapBufferToVram(a0->unk0.unk0.bg); + u16 tileNum = (matchCall->list.listWindow.unk1 << 12) | matchCall->list.listWindow.unk6; + sub_8199DF0(matchCall->list.listWindow.bg, PIXEL_FILL(1), matchCall->list.listWindow.unk6, 1); + sub_8199DF0(matchCall->list.listWindow.bg, PIXEL_FILL(4), matchCall->list.listWindow.unk6 + 1, 1); + SetBgTilemapBuffer(matchCall->list.listWindow.bg, matchCall->tilemapBuffer); + FillBgTilemapBufferRect_Palette0(matchCall->list.listWindow.bg, tileNum, 0, 0, 32, 32); + ChangeBgY(matchCall->list.listWindow.bg, 0, 0); + ChangeBgX(matchCall->list.listWindow.bg, 0, 0); + ChangeBgY(matchCall->list.listWindow.bg, matchCall->list.listWindow.unk3 << 11, 2); + CopyBgTilemapBufferToVram(matchCall->list.listWindow.bg); } -void sub_81C835C(struct UnknownSubSubStruct_0203CF40 *a0) +void sub_81C835C(struct PokenavListMenuWindow *listWindow) { - FillWindowPixelBuffer(a0->windowId, PIXEL_FILL(1)); - PutWindowTilemap(a0->windowId); - CopyWindowToVram(a0->windowId, 1); + FillWindowPixelBuffer(listWindow->windowId, PIXEL_FILL(1)); + PutWindowTilemap(listWindow->windowId); + CopyWindowToVram(listWindow->windowId, 1); } -void sub_81C837C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) +void sub_81C837C(struct MatchCallWindowState *state, struct PokenavSub17Substruct *a1) { - s32 arg2 = a0->listLength - a0->windowTopIndex; - if (arg2 > a0->visibleEntries) - arg2 = a0->visibleEntries; + s32 arg2 = state->listLength - state->windowTopIndex; + if (arg2 > state->visibleEntries) + arg2 = state->visibleEntries; - sub_81C83AC(a0->unk10, a0->windowTopIndex, arg2, a0->unkC, 0, a1); + sub_81C83AC(state->unk10, state->windowTopIndex, arg2, state->unkC, 0, a1); } -void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *a5) +void sub_81C83AC(void * a0, u32 a1, u32 a2, u32 a3, u32 a4, struct PokenavSub17Substruct *list) { if (a2 == 0) return; - a5->unk1C = a0 + a1 * a3; - a5->unk18 = a3; - a5->unk0.unkC = 0; - a5->unk0.unkE = a2; - a5->unk14 = a1; - a5->unk10 = a4; + list->unk1C = a0 + a1 * a3; + list->unk18 = a3; + list->listWindow.unkC = 0; + list->listWindow.unkE = a2; + list->unk14 = a1; + list->unk10 = a4; CreateLoopedTask(LoopedTask_sub_81C83F0, 5); } @@ -218,23 +218,23 @@ bool32 sub_81C83E0(void) u32 LoopedTask_sub_81C83F0(s32 state) { u32 v1; - struct PokenavSub17Substruct *structPtr = GetSubstructPtr(17); + struct PokenavSub17Substruct *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); switch (state) { case 0: - v1 = (structPtr->unk0.unkA + structPtr->unk0.unkC + structPtr->unk10) & 0xF; + v1 = (structPtr->listWindow.unkA + structPtr->listWindow.unkC + structPtr->unk10) & 0xF; structPtr->unk34(structPtr->unk1C, structPtr->unkTextBuffer); if (structPtr->unk38 != NULL) - structPtr->unk38(structPtr->unk0.windowId, structPtr->unk14, v1); + structPtr->unk38(structPtr->listWindow.windowId, structPtr->unk14, v1); - AddTextPrinterParameterized(structPtr->unk0.windowId, structPtr->unk0.fontId, structPtr->unkTextBuffer, 8, (v1 << 4) + 1, 255, NULL); - if (++structPtr->unk0.unkC >= structPtr->unk0.unkE) + AddTextPrinterParameterized(structPtr->listWindow.windowId, structPtr->listWindow.fontId, structPtr->unkTextBuffer, 8, (v1 << 4) + 1, 255, NULL); + if (++structPtr->listWindow.unkC >= structPtr->listWindow.unkE) { if (structPtr->unk38 != NULL) - CopyWindowToVram(structPtr->unk0.windowId, 3); + CopyWindowToVram(structPtr->listWindow.windowId, 3); else - CopyWindowToVram(structPtr->unk0.windowId, 2); + CopyWindowToVram(structPtr->listWindow.windowId, 2); return LT_INC_AND_PAUSE; } else @@ -253,14 +253,14 @@ u32 LoopedTask_sub_81C83F0(s32 state) bool32 ShouldShowUpArrow(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); return (structPtr->unk888.windowTopIndex != 0); } bool32 ShouldShowDownArrow(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); struct MatchCallWindowState *subPtr = &structPtr->unk888; return (subPtr->windowTopIndex + subPtr->visibleEntries < subPtr->listLength); @@ -268,7 +268,7 @@ bool32 ShouldShowDownArrow(void) void MatchCall_MoveWindow(s32 a0, bool32 a1) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); struct MatchCallWindowState *subPtr = &structPtr->unk888; if (a0 < 0) @@ -276,7 +276,7 @@ void MatchCall_MoveWindow(s32 a0, bool32 a1) if (subPtr->windowTopIndex + a0 < 0) a0 = -1 * subPtr->windowTopIndex; if (a1) - sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + a0, a0 * -1, subPtr->unkC, a0, &structPtr->unk0); + sub_81C83AC(subPtr->unk10, subPtr->windowTopIndex + a0, a0 * -1, subPtr->unkC, a0, &structPtr->list); } else if (a1) { @@ -284,31 +284,31 @@ void MatchCall_MoveWindow(s32 a0, bool32 a1) if (temp + a0 >= subPtr->listLength) a0 = subPtr->listLength - temp; - sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, a0, subPtr->unkC, subPtr->visibleEntries, &structPtr->unk0); + sub_81C83AC(subPtr->unk10, gUnknown_0203CF44, a0, subPtr->unkC, subPtr->visibleEntries, &structPtr->list); } - sub_81C8568(a0, &structPtr->unk0); + sub_81C8568(a0, &structPtr->list); subPtr->windowTopIndex += a0; } -void sub_81C8568(s32 a0, struct PokenavSub17Substruct *a1) +void sub_81C8568(s32 a0, struct PokenavSub17Substruct *list) { - a1->unk20 = GetBgY(a1->unk0.bg); - a1->unk24 = a1->unk20 + (a0 << 12); + list->unk20 = GetBgY(list->listWindow.bg); + list->unk24 = list->unk20 + (a0 << 12); if (a0 > 0) - a1->unk30 = 1; + list->unk30 = 1; else - a1->unk30 = 2; - a1->unk2C = a0; - a1->unk28 = CreateLoopedTask(LoopedTask_sub_81C85A0, 6); + list->unk30 = 2; + list->unk2C = a0; + list->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C85A0, 6); } u32 LoopedTask_sub_81C85A0(s32 state) { s32 y, v1; bool32 flag; - struct PokenavSub17 *structPtr = GetSubstructPtr(17); - struct PokenavSub17Substruct *subPtr = &structPtr->unk0; + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + struct PokenavSub17Substruct *subPtr = &structPtr->list; switch (state) { @@ -318,8 +318,8 @@ u32 LoopedTask_sub_81C85A0(s32 state) return LT_PAUSE; case 1: flag = FALSE; - y = GetBgY(subPtr->unk0.bg); - v1 = ChangeBgY(subPtr->unk0.bg, 0x1000, subPtr->unk30); + y = GetBgY(subPtr->listWindow.bg); + v1 = ChangeBgY(subPtr->listWindow.bg, 0x1000, subPtr->unk30); if (subPtr->unk30 == 2) { if ((y > subPtr->unk24 || y <= subPtr->unk20) && v1 <= subPtr->unk24) @@ -333,8 +333,8 @@ u32 LoopedTask_sub_81C85A0(s32 state) if (flag) { - subPtr->unk0.unkA = (subPtr->unk0.unkA + subPtr->unk2C) & 0xF; - ChangeBgY(subPtr->unk0.bg, subPtr->unk24, 0); + subPtr->listWindow.unkA = (subPtr->listWindow.unkA + subPtr->unk2C) & 0xF; + ChangeBgY(subPtr->listWindow.bg, subPtr->unk24, 0); return LT_FINISH; } return LT_PAUSE; @@ -342,15 +342,15 @@ u32 LoopedTask_sub_81C85A0(s32 state) return LT_FINISH; } -bool32 sub_81C8630(void) +bool32 IsMonListLoopedTaskActive(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); - return IsLoopedTaskActive(structPtr->unk0.unk28); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + return IsLoopedTaskActive(structPtr->list.loopedTaskId); } struct MatchCallWindowState *GetMatchCallWindowStruct(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); return &structPtr->unk888; } @@ -448,7 +448,7 @@ int MatchCall_PageDown(void) } } -u32 GetSelectedMatchCall(void) +u32 GetSelectedPokenavListIndex(void) { struct MatchCallWindowState *structPtr = GetMatchCallWindowStruct(); @@ -464,53 +464,53 @@ u32 GetMatchCallListTopIndex(void) void sub_81C877C(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); structPtr->unk89C = 0; - structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8870, 6); + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8870, 6); } void PrintCheckPageInfo(s16 a0) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); structPtr->unk888.windowTopIndex += a0; structPtr->unk89C = 0; - structPtr->unk8A0 = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6); } void sub_81C87F0(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); structPtr->unk89C = 0; - structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8A28, 6); + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_sub_81C8A28, 6); } -bool32 sub_81C8820(void) +bool32 IsMatchCallListTaskActive(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); - return IsLoopedTaskActive(structPtr->unk8A0); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + return IsLoopedTaskActive(structPtr->loopedTaskId); } void sub_81C8838(void) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); struct MatchCallWindowState *subPtr = &structPtr->unk888; - structPtr->unk0.unk38(structPtr->unk0.unk0.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->unk0.unk0.unkA + subPtr->selectedIndexOffset) & 0xF); - CopyWindowToVram(structPtr->unk0.unk0.windowId, 1); + structPtr->list.unk38(structPtr->list.listWindow.windowId, subPtr->windowTopIndex + subPtr->selectedIndexOffset, (structPtr->list.listWindow.unkA + subPtr->selectedIndexOffset) & 0xF); + CopyWindowToVram(structPtr->list.listWindow.windowId, 1); } // TODO: u32 LoopedTask_sub_81C8870(s32 state) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); switch (state) { case 0: - ToggleMatchCallArrows(&structPtr->unk0, 1); + ToggleMatchCallArrows(&structPtr->list, 1); // fall-through case 1: if (structPtr->unk89C != structPtr->unk888.selectedIndexOffset) - sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, 1); + sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, 1); structPtr->unk89C++; return LT_INC_AND_PAUSE; @@ -520,7 +520,7 @@ u32 LoopedTask_sub_81C8870(s32 state) if (structPtr->unk89C != structPtr->unk888.visibleEntries) return 6; if (structPtr->unk888.selectedIndexOffset != 0) - sub_81C8B70(&structPtr->unk0.unk0, structPtr->unk89C, structPtr->unk888.selectedIndexOffset); + sub_81C8B70(&structPtr->list.listWindow, structPtr->unk89C, structPtr->unk888.selectedIndexOffset); return LT_INC_AND_PAUSE; } @@ -537,7 +537,7 @@ u32 LoopedTask_sub_81C8870(s32 state) } return LT_PAUSE; case 4: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; structPtr->unk888.selectedIndexOffset = 0; @@ -548,35 +548,35 @@ u32 LoopedTask_sub_81C8870(s32 state) u32 LoopedTask_PrintCheckPageInfo(s32 state) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); if (IsDma3ManagerBusyWithBgCopy()) return LT_PAUSE; switch (state) { case 0: - sub_81C8CB4(&structPtr->unk888, &structPtr->unk0); + sub_81C8CB4(&structPtr->unk888, &structPtr->list); break; case 1: - PrintMatchCallFieldNames(&structPtr->unk0, 0); + PrintMatchCallFieldNames(&structPtr->list, 0); break; case 2: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_STRATEGY); + PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_STRATEGY); break; case 3: - PrintMatchCallFieldNames(&structPtr->unk0, 1); + PrintMatchCallFieldNames(&structPtr->list, 1); break; case 4: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_POKEMON); + PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_POKEMON); break; case 5: - PrintMatchCallFieldNames(&structPtr->unk0, 2); + PrintMatchCallFieldNames(&structPtr->list, 2); break; case 6: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_INTRO_1); + PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_INTRO_1); break; case 7: - PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_INTRO_2); + PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->list, CHECK_PAGE_INTRO_2); break; default: return LT_FINISH; @@ -594,9 +594,9 @@ u32 LoopedTask_sub_81C8A28(s32 state) if (IsDma3ManagerBusyWithBgCopy()) return LT_PAUSE; - structPtr = GetSubstructPtr(17); + structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); subPtr888 = &structPtr->unk888; - subPtr0 = &structPtr->unk0; + subPtr0 = &structPtr->list; switch (state) { @@ -607,7 +607,7 @@ u32 LoopedTask_sub_81C8A28(s32 state) ptr = &structPtr->unk89C; if (++(*ptr) < structPtr->unk888.visibleEntries) { - sub_81C8B70(&subPtr0->unk0, *ptr, 1); + sub_81C8B70(&subPtr0->listWindow, *ptr, 1); return LT_PAUSE; } @@ -618,7 +618,7 @@ u32 LoopedTask_sub_81C8A28(s32 state) { s32 r4 = subPtr888->windowTopIndex; r5 = -r4; - sub_81C8B70(&subPtr0->unk0, r5, r4); + sub_81C8B70(&subPtr0->listWindow, r5, r4); subPtr888->selectedIndexOffset = r4; *ptr = r5; return LT_INC_AND_PAUSE; @@ -630,7 +630,7 @@ u32 LoopedTask_sub_81C8A28(s32 state) { s32 r4 = subPtr888->windowTopIndex + subPtr888->visibleEntries - subPtr888->listLength; r5 = -r4; - sub_81C8B70(&subPtr0->unk0, r5, r4); + sub_81C8B70(&subPtr0->listWindow, r5, r4); subPtr888->selectedIndexOffset = r4; *ptr = r5; return LT_INC_AND_PAUSE; @@ -641,14 +641,14 @@ u32 LoopedTask_sub_81C8A28(s32 state) MatchCall_MoveWindow(structPtr->unk89C, FALSE); return LT_INC_AND_PAUSE; case 3: - if (!sub_81C8630()) + if (!IsMonListLoopedTaskActive()) { structPtr->unk89C = 0; return 1; } return 2; case 4: - sub_81C83AC(subPtr888->unk10, subPtr888->windowTopIndex + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->unk0); + sub_81C83AC(subPtr888->unk10, subPtr888->windowTopIndex + structPtr->unk89C, 1, subPtr888->unkC, structPtr->unk89C, &structPtr->list); return LT_INC_AND_PAUSE; case 5: if (sub_81C83E0()) @@ -664,16 +664,16 @@ u32 LoopedTask_sub_81C8A28(s32 state) return LT_FINISH; } -void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2) +void sub_81C8B70(struct PokenavListMenuWindow *listWindow, s32 a1, s32 a2) { - u8 *v1 = (u8*)GetWindowAttribute(a0->windowId, WINDOW_TILE_DATA); - u32 v2 = a0->unk4 * 64; + u8 *v1 = (u8*)GetWindowAttribute(listWindow->windowId, WINDOW_TILE_DATA); + u32 v2 = listWindow->unk4 * 64; - a1 = (a0->unkA + a1) & 0xF; + a1 = (listWindow->unkA + a1) & 0xF; if (a1 + a2 <= 16) { CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, a2 * v2); - CopyWindowToVram(a0->windowId, 2); + CopyWindowToVram(listWindow->windowId, 2); } else { @@ -682,63 +682,63 @@ void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2) CpuFastFill8(PIXEL_FILL(1), v1 + a1 * v2, v3 * v2); CpuFastFill8(PIXEL_FILL(1), v1, v4 * v2); - CopyWindowToVram(a0->windowId, 2); + CopyWindowToVram(listWindow->windowId, 2); } for (a2--; a2 != -1; a1 = (a1 + 1) & 0xF, a2--) - ClearRematchPokeballIcon(a0->windowId, a1); + ClearRematchPokeballIcon(listWindow->windowId, a1); - CopyWindowToVram(a0->windowId, 1); + CopyWindowToVram(listWindow->windowId, 1); } -void sub_81C8C64(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1) +void sub_81C8C64(struct PokenavListMenuWindow *listWindow, u32 a1) { u16 var; - u16 *v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(a0->windowId, WINDOW_BG)); - v1 += ((a0->unkA << 6) + a0->unk2) - 1; + u16 *v1 = (u16*)GetBgTilemapBuffer(GetWindowAttribute(listWindow->windowId, WINDOW_BG)); + v1 += ((listWindow->unkA << 6) + listWindow->unk2) - 1; if (a1 != 0) - var = (a0->unk1 << 12) | (a0->unk6 + 1); + var = (listWindow->unk1 << 12) | (listWindow->unk6 + 1); else - var = (a0->unk1 << 12) | (a0->unk6); + var = (listWindow->unk1 << 12) | (listWindow->unk6); v1[0] = var; v1[0x20] = var; } -void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) +void sub_81C8CB4(struct MatchCallWindowState *state, struct PokenavSub17Substruct *list) { u8 colors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_RED}; - a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer); - a1->unk38(a1->unk0.windowId, a0->windowTopIndex, a1->unk0.unkA); - FillWindowPixelRect(a1->unk0.windowId, PIXEL_FILL(4), 0, a1->unk0.unkA * 16, a1->unk0.unk4 * 8, 16); - AddTextPrinterParameterized3(a1->unk0.windowId, a1->unk0.fontId, 8, (a1->unk0.unkA * 16) + 1, colors, TEXT_SPEED_FF, a1->unkTextBuffer); - sub_81C8C64(&a1->unk0, 1); - CopyWindowRectToVram(a1->unk0.windowId, 3, 0, a1->unk0.unkA * 2, a1->unk0.unk4, 2); + list->unk34(state->unk10 + state->unkC * state->windowTopIndex, list->unkTextBuffer); + list->unk38(list->listWindow.windowId, state->windowTopIndex, list->listWindow.unkA); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(4), 0, list->listWindow.unkA * 16, list->listWindow.unk4 * 8, 16); + AddTextPrinterParameterized3(list->listWindow.windowId, list->listWindow.fontId, 8, (list->listWindow.unkA * 16) + 1, colors, TEXT_SPEED_FF, list->unkTextBuffer); + sub_81C8C64(&list->listWindow, 1); + CopyWindowRectToVram(list->listWindow.windowId, 3, 0, list->listWindow.unkA * 2, list->listWindow.unk4, 2); } -void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) +void sub_81C8D4C(struct MatchCallWindowState *state, struct PokenavSub17Substruct *list) { - a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer); - FillWindowPixelRect(a1->unk0.windowId, PIXEL_FILL(1), 0, a1->unk0.unkA * 16, a1->unk0.unk4 * 8, 16); - AddTextPrinterParameterized(a1->unk0.windowId, a1->unk0.fontId, a1->unkTextBuffer, 8, a1->unk0.unkA * 16 + 1, TEXT_SPEED_FF, NULL); - sub_81C8C64(&a1->unk0, 0); - CopyWindowToVram(a1->unk0.windowId, 3); + list->unk34(state->unk10 + state->unkC * state->windowTopIndex, list->unkTextBuffer); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, list->listWindow.unkA * 16, list->listWindow.unk4 * 8, 16); + AddTextPrinterParameterized(list->listWindow.windowId, list->listWindow.fontId, list->unkTextBuffer, 8, list->listWindow.unkA * 16 + 1, TEXT_SPEED_FF, NULL); + sub_81C8C64(&list->listWindow, 0); + CopyWindowToVram(list->listWindow.windowId, 3); } -void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 fieldId) +void PrintMatchCallFieldNames(struct PokenavSub17Substruct *list, u32 fieldId) { const u8 *fieldNames[] = {gText_PokenavMatchCall_Strategy, gText_PokenavMatchCall_TrainerPokemon, gText_PokenavMatchCall_SelfIntroduction}; u8 colors[3] = {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED}; - u32 top = (a0->unk0.unkA + 1 + (fieldId * 2)) & 0xF; + u32 top = (list->listWindow.unkA + 1 + (fieldId * 2)) & 0xF; - FillWindowPixelRect(a0->unk0.windowId, PIXEL_FILL(1), 0, top << 4, a0->unk0.unk4, 16); - AddTextPrinterParameterized3(a0->unk0.windowId, 7, 2, (top << 4) + 1, colors, -1, fieldNames[fieldId]); - CopyWindowRectToVram(a0->unk0.windowId, 2, 0, top << 1, a0->unk0.unk4, 2); + FillWindowPixelRect(list->listWindow.windowId, PIXEL_FILL(1), 0, top << 4, list->listWindow.unk4, 16); + AddTextPrinterParameterized3(list->listWindow.windowId, 7, 2, (top << 4) + 1, colors, -1, fieldNames[fieldId]); + CopyWindowRectToVram(list->listWindow.windowId, 2, 0, top << 1, list->listWindow.unk4, 2); } -static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 checkPageEntry) +static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *list, u32 checkPageEntry) { // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] = @@ -749,14 +749,14 @@ static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct Pok [CHECK_PAGE_INTRO_2] = 7 }; - u32 r6 = (a1->unk0.unkA + lineOffsets[checkPageEntry]) & 0xF; + u32 r6 = (list->listWindow.unkA + lineOffsets[checkPageEntry]) & 0xF; const u8 *str = GetMatchCallFlavorText(a0->windowTopIndex, checkPageEntry); if (str != NULL) { - sub_81DB620(a1->unk0.windowId, 1, r6 * 2, a1->unk0.unk4 - 1, 2); - AddTextPrinterParameterized(a1->unk0.windowId, 7, str, 2, (r6 << 4) + 1, TEXT_SPEED_FF, NULL); - CopyWindowRectToVram(a1->unk0.windowId, 2, 0, r6 * 2, a1->unk0.unk4, 2); + sub_81DB620(list->listWindow.windowId, 1, r6 * 2, list->listWindow.unk4 - 1, 2); + AddTextPrinterParameterized(list->listWindow.windowId, 7, str, 2, (r6 << 4) + 1, TEXT_SPEED_FF, NULL); + CopyWindowRectToVram(list->listWindow.windowId, 2, 0, r6 * 2, list->listWindow.unk4, 2); } } @@ -839,57 +839,57 @@ void sub_81C8ED0(void) Pokenav_AllocAndLoadPalettes(sMatchcallArrowPalettes); } -void sub_81C8EF8(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1) +void CreateMatchCallArrowSprites(struct MatchCallWindowState *windowState, struct PokenavSub17Substruct *list) { u32 spriteId; s16 x; - spriteId = CreateSprite(&sMatchCallRightArrowSprite, a1->unk0.unk2 * 8 + 3, (a1->unk0.unk3 + 1) * 8, 7); - a1->rightArrow = &gSprites[spriteId]; + spriteId = CreateSprite(&sMatchCallRightArrowSprite, list->listWindow.unk2 * 8 + 3, (list->listWindow.unk3 + 1) * 8, 7); + list->rightArrow = &gSprites[spriteId]; - x = a1->unk0.unk2 * 8 + (a1->unk0.unk4 - 1) * 4; - spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, a1->unk0.unk3 * 8 + a0->visibleEntries * 16, 7); - a1->downArrow = &gSprites[spriteId]; - a1->downArrow->oam.tileNum += 2; - a1->downArrow->callback = SpriteCB_MatchCallDownArrow; + x = list->listWindow.unk2 * 8 + (list->listWindow.unk4 - 1) * 4; + spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, list->listWindow.unk3 * 8 + windowState->visibleEntries * 16, 7); + list->downArrow = &gSprites[spriteId]; + list->downArrow->oam.tileNum += 2; + list->downArrow->callback = SpriteCB_MatchCallDownArrow; - spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, a1->unk0.unk3 * 8, 7); - a1->upArrow = &gSprites[spriteId]; - a1->upArrow->oam.tileNum += 4; - a1->upArrow->callback = SpriteCB_MatchCallUpArrow; + spriteId = CreateSprite(&sMatchCallUpDownArrowSprite, x, list->listWindow.unk3 * 8, 7); + list->upArrow = &gSprites[spriteId]; + list->upArrow->oam.tileNum += 4; + list->upArrow->callback = SpriteCB_MatchCallUpArrow; } -void sub_81C8FE0(struct PokenavSub17Substruct *a0) +void DestroyMatchCallListArrows(struct PokenavSub17Substruct *list) { - DestroySprite(a0->rightArrow); - DestroySprite(a0->upArrow); - DestroySprite(a0->downArrow); + DestroySprite(list->rightArrow); + DestroySprite(list->upArrow); + DestroySprite(list->downArrow); FreeSpriteTilesByTag(0xA); FreeSpritePaletteByTag(0x14); } -void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, bool32 shouldHide) +void ToggleMatchCallArrows(struct PokenavSub17Substruct *list, bool32 shouldHide) { if (shouldHide) { - a0->rightArrow->callback = SpriteCallbackDummy; - a0->upArrow->callback = SpriteCallbackDummy; - a0->downArrow->callback = SpriteCallbackDummy; + list->rightArrow->callback = SpriteCallbackDummy; + list->upArrow->callback = SpriteCallbackDummy; + list->downArrow->callback = SpriteCallbackDummy; } else { - a0->rightArrow->callback = SpriteCB_MatchCallRightArrow; - a0->upArrow->callback = SpriteCB_MatchCallUpArrow; - a0->downArrow->callback = SpriteCB_MatchCallDownArrow; + list->rightArrow->callback = SpriteCB_MatchCallRightArrow; + list->upArrow->callback = SpriteCB_MatchCallUpArrow; + list->downArrow->callback = SpriteCB_MatchCallDownArrow; } - a0->rightArrow->invisible = shouldHide; - a0->upArrow->invisible = shouldHide; - a0->downArrow->invisible = shouldHide; + list->rightArrow->invisible = shouldHide; + list->upArrow->invisible = shouldHide; + list->downArrow->invisible = shouldHide; } void SpriteCB_MatchCallRightArrow(struct Sprite *sprite) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); sprite->pos2.y = structPtr->unk888.selectedIndexOffset << 4; } @@ -931,68 +931,68 @@ void SpriteCB_MatchCallUpArrow(struct Sprite *sprite) void ToggleMatchCallVerticalArrows(bool32 shouldHide) { - struct PokenavSub17 *structPtr = GetSubstructPtr(17); - structPtr->unk0.upArrow->data[7] = shouldHide; - structPtr->unk0.downArrow->data[7] = shouldHide; + struct PokenavSub17 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_MATCH_CALL_LIST); + structPtr->list.upArrow->data[7] = shouldHide; + structPtr->list.downArrow->data[7] = shouldHide; } -void sub_81C9160(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1) +void InitMatchCallWindowState(struct MatchCallWindowState *dst, struct PokenavListTemplate *template) { - a0->unk10 = a1->list.matchCallEntries; - a0->windowTopIndex = a1->unk6; - a0->listLength = a1->unk4; - a0->unkC = a1->unk8; - a0->visibleEntries = a1->unkC; - if (a0->visibleEntries >= a0->listLength) + dst->unk10 = template->list.matchCallEntries; + dst->windowTopIndex = template->unk6; + dst->listLength = template->count; + dst->unkC = template->unk8; + dst->visibleEntries = template->maxShowed; + if (dst->visibleEntries >= dst->listLength) { - a0->windowTopIndex = 0; - a0->unk4 = 0; - a0->selectedIndexOffset = a1->unk6; + dst->windowTopIndex = 0; + dst->unk4 = 0; + dst->selectedIndexOffset = template->unk6; } else { - a0->unk4 = a0->listLength - a0->visibleEntries; - if (a0->windowTopIndex + a0->visibleEntries > a0->listLength) + dst->unk4 = dst->listLength - dst->visibleEntries; + if (dst->windowTopIndex + dst->visibleEntries > dst->listLength) { - a0->selectedIndexOffset = a0->windowTopIndex + a0->visibleEntries - a0->listLength; - a0->windowTopIndex = a1->unk6 - a0->selectedIndexOffset; + dst->selectedIndexOffset = dst->windowTopIndex + dst->visibleEntries - dst->listLength; + dst->windowTopIndex = template->unk6 - dst->selectedIndexOffset; } else { - a0->selectedIndexOffset = 0; + dst->selectedIndexOffset = 0; } } } -bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3) +bool32 CopyPokenavListMenuTemplate(struct PokenavSub17Substruct *dest, const struct BgTemplate *bgTemplate, struct PokenavListTemplate *template, s32 a3) { struct WindowTemplate window; - a0->unk0.bg = a1->bg; - a0->unk0.unk6 = a3; - a0->unk34 = a2->listFunc.unk10_2; - a0->unk38 = a2->unk14; - a0->unk0.unk1 = a2->unkD; - a0->unk0.unk2 = a2->unk9; - a0->unk0.unk3 = a2->unkB; - a0->unk0.unk4 = a2->unkA; - a0->unk0.fontId = a2->unkE; + dest->listWindow.bg = bgTemplate->bg; + dest->listWindow.unk6 = a3; + dest->unk34 = template->listFunc.unk10_2; + dest->unk38 = template->unk14; + dest->listWindow.unk1 = template->fillValue; + dest->listWindow.unk2 = template->item_X; + dest->listWindow.unk3 = template->listTop; + dest->listWindow.unk4 = template->windowWidth; + dest->listWindow.fontId = template->fontId; - window.bg = a1->bg; - window.tilemapLeft = a2->unk9; + window.bg = bgTemplate->bg; + window.tilemapLeft = template->item_X; window.tilemapTop = 0; - window.width = a2->unkA; + window.width = template->windowWidth; window.height = 32; - window.paletteNum = a2->unkD; + window.paletteNum = template->fillValue; window.baseBlock = a3 + 2; - a0->unk0.windowId = AddWindow(&window); - if (a0->unk0.windowId == 0xFF) + dest->listWindow.windowId = AddWindow(&window); + if (dest->listWindow.windowId == 0xFF) return FALSE; - a0->unk0.unkA = 0; - a0->rightArrow = NULL; - a0->upArrow = NULL; - a0->downArrow = NULL; + dest->listWindow.unkA = 0; + dest->rightArrow = NULL; + dest->upArrow = NULL; + dest->downArrow = NULL; return 1; } diff --git a/src/pokenav_menu_handler_1.c b/src/pokenav_menu_handler_1.c index 6002d731bc..4792756c18 100644 --- a/src/pokenav_menu_handler_1.c +++ b/src/pokenav_menu_handler_1.c @@ -32,53 +32,53 @@ static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*); static void SetMenuInputHandler(struct Pokenav1Struct *state); // Number of entries - 1 for that menu type -static const u8 sLastCursorPositions[] = +static const u8 sLastCursorPositions[] = { - [POKENAV_MENU_TYPE_DEFAULT] = 2, - [POKENAV_MENU_TYPE_UNLOCK_MC] = 3, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, - [POKENAV_MENU_TYPE_CONDITION] = 2, + [POKENAV_MENU_TYPE_DEFAULT] = 2, + [POKENAV_MENU_TYPE_UNLOCK_MC] = 3, + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = 4, + [POKENAV_MENU_TYPE_CONDITION] = 2, [POKENAV_MENU_TYPE_CONDITION_SEARCH] = 5 }; static const u8 sMenuItems[][6] = { - [POKENAV_MENU_TYPE_DEFAULT] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, + [POKENAV_MENU_TYPE_DEFAULT] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, [2 ... 5] = POKENAV_MENUITEM_SWITCH_OFF }, - [POKENAV_MENU_TYPE_UNLOCK_MC] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - POKENAV_MENUITEM_MATCH_CALL, + [POKENAV_MENU_TYPE_UNLOCK_MC] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + POKENAV_MENUITEM_MATCH_CALL, [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF }, - [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = - { - POKENAV_MENUITEM_MAP, - POKENAV_MENUITEM_CONDITION, - POKENAV_MENUITEM_MATCH_CALL, - POKENAV_MENUITEM_RIBBONS, + [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = + { + POKENAV_MENUITEM_MAP, + POKENAV_MENUITEM_CONDITION, + POKENAV_MENUITEM_MATCH_CALL, + POKENAV_MENUITEM_RIBBONS, [4 ... 5] = POKENAV_MENUITEM_SWITCH_OFF }, - [POKENAV_MENU_TYPE_CONDITION] = - { - POKENAV_MENUITEM_CONDITION_PARTY, - POKENAV_MENUITEM_CONDITION_SEARCH, - POKENAV_MENUITEM_CONDITION_CANCEL, + [POKENAV_MENU_TYPE_CONDITION] = + { + POKENAV_MENUITEM_CONDITION_PARTY, + POKENAV_MENUITEM_CONDITION_SEARCH, + POKENAV_MENUITEM_CONDITION_CANCEL, [3 ... 5] = POKENAV_MENUITEM_SWITCH_OFF }, - [POKENAV_MENU_TYPE_CONDITION_SEARCH] = - { - POKENAV_MENUITEM_CONDITION_SEARCH_COOL, - POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, - POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, - POKENAV_MENUITEM_CONDITION_SEARCH_SMART, - POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, - POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL + [POKENAV_MENU_TYPE_CONDITION_SEARCH] = + { + POKENAV_MENUITEM_CONDITION_SEARCH_COOL, + POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY, + POKENAV_MENUITEM_CONDITION_SEARCH_CUTE, + POKENAV_MENUITEM_CONDITION_SEARCH_SMART, + POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH, + POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL }, }; @@ -87,24 +87,24 @@ static u8 GetPokenavMainMenuType(void) u8 menuType = POKENAV_MENU_TYPE_DEFAULT; if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) - { + { menuType = POKENAV_MENU_TYPE_UNLOCK_MC; if (FlagGet(FLAG_SYS_RIBBON_GET)) menuType = POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS; } - + return menuType; } bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = GetPokenavMainMenuType(); - state->cursorPos = 0; + state->cursorPos = POKENAV_MENUITEM_MAP; state->currMenuItem = POKENAV_MENUITEM_MAP; state->helpBarIndex = HELPBAR_NONE; SetMenuInputHandler(state); @@ -113,12 +113,12 @@ bool32 PokenavCallback_Init_MainMenuCursorOnMap(void) bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = GetPokenavMainMenuType(); - state->cursorPos = 2; + state->cursorPos = POKENAV_MENUITEM_MATCH_CALL; state->currMenuItem = POKENAV_MENUITEM_MATCH_CALL; state->helpBarIndex = HELPBAR_NONE; SetMenuInputHandler(state); @@ -127,12 +127,12 @@ bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void) bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = GetPokenavMainMenuType(); - state->cursorPos = 3; + state->cursorPos = POKENAV_MENUITEM_RIBBONS; state->currMenuItem = POKENAV_MENUITEM_RIBBONS; SetMenuInputHandler(state); return TRUE; @@ -140,12 +140,12 @@ bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void) bool32 PokenavCallback_Init_ConditionMenu(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = POKENAV_MENU_TYPE_CONDITION; - state->cursorPos = 0; + state->cursorPos = 0; //party state->currMenuItem = POKENAV_MENUITEM_CONDITION_PARTY; state->helpBarIndex = HELPBAR_NONE; SetMenuInputHandler(state); @@ -154,10 +154,10 @@ bool32 PokenavCallback_Init_ConditionMenu(void) bool32 PokenavCallback_Init_ConditionSearchMenu(void) { - struct Pokenav1Struct *state = AllocSubstruct(1, sizeof(struct Pokenav1Struct)); + struct Pokenav1Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER, sizeof(struct Pokenav1Struct)); if (!state) return FALSE; - + state->menuType = POKENAV_MENU_TYPE_CONDITION_SEARCH; state->cursorPos = GetSelectedConditionSearch(); state->currMenuItem = state->cursorPos + POKENAV_MENUITEM_CONDITION_SEARCH_COOL; @@ -202,13 +202,13 @@ static u32 (*GetMainMenuInputHandler(void))(struct Pokenav1Struct*) u32 GetMenuHandlerCallback(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->callback(state); } void FreeMenuHandlerSubstruct1(void) { - FreePokenavSubstruct(1); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); } static u32 HandleMainMenuInput(struct Pokenav1Struct *state) @@ -247,12 +247,12 @@ static u32 HandleMainMenuInput(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_NO_RIBBON_WINNERS; } case POKENAV_MENUITEM_SWITCH_OFF: - return -1; + return POKENAV_MENU_FUNC_EXIT; } } - + if (JOY_NEW(B_BUTTON)) - return -1; + return POKENAV_MENU_FUNC_EXIT; return POKENAV_MENU_FUNC_NONE; } @@ -262,7 +262,7 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) { if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - + if (JOY_NEW(A_BUTTON)) { if (sMenuItems[state->menuType][state->cursorPos] == POKENAV_MENUITEM_MATCH_CALL) @@ -277,13 +277,13 @@ static u32 HandleMainMenuInputTutorial(struct Pokenav1Struct *state) return POKENAV_MENU_FUNC_NONE; } } - + if (JOY_NEW(B_BUTTON)) { PlaySE(SE_FAILURE); return POKENAV_MENU_FUNC_NONE; } - + return POKENAV_MENU_FUNC_NONE; } @@ -292,7 +292,7 @@ static u32 HandleMainMenuInputEndTutorial(struct Pokenav1Struct *state) { if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - + if (JOY_NEW(A_BUTTON)) { u32 menuItem = sMenuItems[state->menuType][state->cursorPos]; @@ -342,7 +342,7 @@ static u32 HandleConditionMenuInput(struct Pokenav1Struct *state) { if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - + if (JOY_NEW(A_BUTTON)) { switch (sMenuItems[state->menuType][state->cursorPos]) @@ -386,7 +386,7 @@ static u32 HandleConditionSearchMenuInput(struct Pokenav1Struct *state) { if (UpdateMenuCursorPos(state)) return POKENAV_MENU_FUNC_MOVE_CURSOR; - + if (JOY_NEW(A_BUTTON)) { u8 menuItem = sMenuItems[state->menuType][state->cursorPos]; @@ -488,26 +488,26 @@ static bool32 UpdateMenuCursorPos(struct Pokenav1Struct *state) int GetPokenavMenuType(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->menuType; } // Position of cursor relative to number of current menu options int GetPokenavCursorPos(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->cursorPos; } // ID of menu item the cursor is currently on int GetCurrentMenuItemId(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->currMenuItem; } u16 GetHelpBarTextId(void) { - struct Pokenav1Struct *state = GetSubstructPtr(1); + struct Pokenav1Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_MAIN_MENU_HANDLER); return state->helpBarIndex; } diff --git a/src/pokenav_menu_handler_2.c b/src/pokenav_menu_handler_2.c index 2be92013f4..3fcd41dc9e 100644 --- a/src/pokenav_menu_handler_2.c +++ b/src/pokenav_menu_handler_2.c @@ -27,7 +27,7 @@ struct Pokenav2Struct bool8 otherIconsInMotion; bool8 pokenavAlreadyOpen; bool32 iconVisible[MAX_POKENAV_MENUITEMS]; - struct Sprite * field_028; + struct Sprite * blueLightSpriteId; struct Sprite * iconSprites[MAX_POKENAV_MENUITEMS][4]; u16 bg1TilemapBuffer[0x400]; }; @@ -43,54 +43,54 @@ static u32 LoopedTask_ReturnToConditionMenu(s32 state); static u32 LoopedTask_SelectRibbonsNoWinners(s32 state); static u32 LoopedTask_ReShowDescription(s32 state); static u32 LoopedTask_OpenPokenavFeature(s32 state); -static void sub_81C9FC4(void); -static void sub_81C9FEC(void); +static void LoadPokenavOptionPalettes(void); +static void FreeAndDestroyMainMenuSprites(void); static void CreateMenuOptionSprites(void); -static void sub_81CA094(void); +static void DestroyMenuOptionSprites(void); static void sub_81CA0C8(void); -static void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2); -static void sub_81CA20C(void); -static void sub_81CA278(void); -static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3); -static void sub_81CA3B4(struct Sprite ** sprites); -static void sub_81CA2DC(void); +static void DrawOptionLabelGfx(const u16 *const * a0, s32 yPos, s32 a2); +static void SetupCurrentMenuOptionsGfx(void); +static void SetMenuOptionGfxParams_CursorMoved(void); +static void SetMenuOptionGfxParamsInactive(struct Sprite ** sprites, s32 x, s32 a2, s32 a3); +static void SetMenuOptionGfxParamsActive(struct Sprite ** sprites); +static void SetupPokenavMenuOptions(void); static bool32 AreMenuOptionSpritesMoving(void); -static void sub_81CA448(struct Sprite ** sprites, bool32 a1); +static void SetMenuOptionGfxInvisibility(struct Sprite ** sprites, bool32 a1); static void sub_81CA474(struct Sprite * sprite); static void sub_81CA4AC(struct Sprite * sprite); static void sub_81CA580(u8 taskId); -static void sub_81CA640(void); -static void sub_81CA6AC(struct Sprite * sprite); -static void sub_81CA698(void); +static void CreateMatchCallBlueLightSprite(void); +static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite); +static void DestroyRematchBlueLightSpriteId(void); static void AddOptionDescriptionWindow(void); static void PrintCurrentOptionDescription(void); static void PrintNoRibbonWinners(void); -static bool32 sub_81CA7C4(void); -static void sub_81CA7D4(void); -static void sub_81CA7F4(void); -static void sub_81CA808(u8 taskId); -static void sub_81CA818(void); -static void sub_81CA850(void); -static void sub_81CA864(void); -static bool32 sub_81CA89C(void); -static void sub_81CA8B0(u8 taskId); -static void sub_81CA92C(void); -static void sub_81CA994(void); -static void sub_81CA9C8(void); -static void sub_81CA9D8(void); -static void sub_81CA9EC(u8 taskId); -static void sub_81CAA3C(void); +static bool32 IsDma3ManagerBusyWithBgCopy_(void); +static void CreateMovingBgDotsTask(void); +static void DestroyMovingDotsBgTask(void); +static void Task_MoveBgDots(u8 taskId); +static void CreateBgDotPurplePalTask(void); +static void ChangeBgDotsColorToPurple(void); +static void CreateBgDotLightBluePalTask(void); +static bool32 IsTaskActive_UpdateBgDotsPalette(void); +static void Task_UpdateBgDotsPalette(u8 taskId); +static void SetupPokenavMenuScanlineEffects(void); +static void DestroyMenuOptionGlowTask(void); +static void ResetBldCnt(void); +static void InitMenuOptionGlow(void); +static void Task_CurrentMenuOptionGlow(u8 taskId); +static void SetMenuOptionGlow(void); -static const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); -static const u32 gUnknown_0861FC98[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); -static const u32 gUnknown_0861FCAC[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); -static const u16 gUnknown_0861FD4C[] = INCBIN_U16("graphics/pokenav/outline.gbapal"); -static const u32 gUnknown_0861FD6C[] = INCBIN_U32("graphics/pokenav/outline.4bpp.lz"); -static const u32 gUnknown_0861FFF4[] = INCBIN_U32("graphics/pokenav/outline_map.bin.lz"); -static const u16 gUnknown_08620104[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); -static const u32 gUnknown_08620124[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); +static const u16 sPokenavBgDotsPal[] = INCBIN_U16("graphics/pokenav/bg_dots.gbapal"); +static const u32 sPokenavBgDotsTiles[] = INCBIN_U32("graphics/pokenav/bg_dots.4bpp.lz"); +static const u32 sPokenavBgDotsTilemap[] = INCBIN_U32("graphics/pokenav/bg_dots.bin.lz"); +static const u16 sPokenavDeviceBgPal[] = INCBIN_U16("graphics/pokenav/device_outline.gbapal"); +static const u32 sPokenavDeviceBgTiles[] = INCBIN_U32("graphics/pokenav/device_outline.4bpp.lz"); +static const u32 sPokenavDeviceBgTilemap[] = INCBIN_U32("graphics/pokenav/device_outline_map.bin.lz"); +static const u16 sMatchCallBlueLightPal[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); +static const u32 sMatchCallBlueLightTiles[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); -static const struct BgTemplate gUnknown_08620194[] = { +static const struct BgTemplate sPokenavMainMenuBgTemplates[] = { { .bg = 1, .charBaseIndex = 1, @@ -118,7 +118,8 @@ static const struct BgTemplate gUnknown_08620194[] = { } }; -static const LoopedTask sMenuHandlerLoopTaskFuncs[] = { +static const LoopedTask sMenuHandlerLoopTaskFuncs[] = +{ [POKENAV_MENU_FUNC_NONE] = NULL, [POKENAV_MENU_FUNC_MOVE_CURSOR] = LoopedTask_MoveMenuCursor, [POKENAV_MENU_FUNC_OPEN_CONDITION] = LoopedTask_OpenConditionMenu, @@ -130,7 +131,7 @@ static const LoopedTask sMenuHandlerLoopTaskFuncs[] = { [POKENAV_MENU_FUNC_OPEN_FEATURE] = LoopedTask_OpenPokenavFeature }; -static const struct CompressedSpriteSheet gUnknown_086201C4[] = +static const struct CompressedSpriteSheet sPokenavOptionsSpriteSheets[] = { { .data = gPokenavOptions_Gfx, @@ -138,76 +139,75 @@ static const struct CompressedSpriteSheet gUnknown_086201C4[] = .tag = 0x0003 }, { - .data = gUnknown_08620124, + .data = sMatchCallBlueLightTiles, .size = 0x0100, .tag = 0x0001 } }; -static const struct SpritePalette gUnknown_086201D4[] = +static const struct SpritePalette sPokenavOptionsSpritePalettes[] = { {gPokenavOptions_Pal + 0x00, 4}, {gPokenavOptions_Pal + 0x10, 5}, {gPokenavOptions_Pal + 0x20, 6}, {gPokenavOptions_Pal + 0x30, 7}, {gPokenavOptions_Pal + 0x40, 8}, - {gUnknown_08620104, 3}, + {sMatchCallBlueLightPal, 3}, {} }; -static const u16 gUnknown_0862020C[] = {0, 0}; -static const u16 gUnknown_08620210[] = {0x20, 1}; -static const u16 gUnknown_08620214[] = {0x40, 4}; -static const u16 gUnknown_08620218[] = {0x60, 2}; -static const u16 gUnknown_0862021C[] = {0x80, 3}; -static const u16 gUnknown_08620220[] = {0xA0, 1}; -static const u16 gUnknown_08620224[] = {0xC0, 1}; -static const u16 gUnknown_08620228[] = {0xE0, 4}; -static const u16 gUnknown_0862022C[] = {0x100, 1}; -static const u16 gUnknown_08620230[] = {0x120, 2}; -static const u16 gUnknown_08620234[] = {0x140, 0}; -static const u16 gUnknown_08620238[] = {0x160, 0}; -static const u16 gUnknown_0862023C[] = {0x180, 3}; +static const u16 sOptionsLabelGfx_RegionMap[] = {0, 0}; +static const u16 sOptionsLabelGfx_Condition[] = {0x20, 1}; +static const u16 sOptionsLabelGfx_MatchCall[] = {0x40, 4}; +static const u16 sOptionsLabelGfx_Ribbons[] = {0x60, 2}; +static const u16 sOptionsLabelGfx_SwitchOff[] = {0x80, 3}; +static const u16 sOptionsLabelGfx_Party[] = {0xA0, 1}; +static const u16 sOptionsLabelGfx_Search[] = {0xC0, 1}; +static const u16 sOptionsLabelGfx_Cool[] = {0xE0, 4}; +static const u16 sOptionsLabelGfx_Beauty[] = {0x100, 1}; +static const u16 sOptionsLabelGfx_Cute[] = {0x120, 2}; +static const u16 sOptionsLabelGfx_Smart[] = {0x140, 0}; +static const u16 sOptionsLabelGfx_Tough[] = {0x160, 0}; +static const u16 sOptionsLabelGfx_Cancel[] = {0x180, 3}; -struct UnkStruct_08620240 +struct OptionsLabelGfx { - u16 unk0; - u16 unk2; - const u16 *unk4[MAX_POKENAV_MENUITEMS]; + u16 yStart; + u16 deltaY; + const u16 *tiles[MAX_POKENAV_MENUITEMS]; }; -// TODO -static const struct UnkStruct_08620240 gUnknown_08620240[POKENAV_MENU_TYPE_COUNT] = +static const struct OptionsLabelGfx sPokenavMenuOptionLabelGfx[POKENAV_MENU_TYPE_COUNT] = { [POKENAV_MENU_TYPE_DEFAULT] = { - 0x2A, - 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_0862021C} + .yStart = 42, + .deltaY = 20, + {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_SwitchOff} }, [POKENAV_MENU_TYPE_UNLOCK_MC] = { - 0x2A, - 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_0862021C} + .yStart = 42, + .deltaY = 20, + {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_MatchCall, sOptionsLabelGfx_SwitchOff} }, [POKENAV_MENU_TYPE_UNLOCK_MC_RIBBONS] = { - 0x2A, - 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_08620218, gUnknown_0862021C} + .yStart = 42, + .deltaY = 20, + {sOptionsLabelGfx_RegionMap, sOptionsLabelGfx_Condition, sOptionsLabelGfx_MatchCall, sOptionsLabelGfx_Ribbons, sOptionsLabelGfx_SwitchOff} }, [POKENAV_MENU_TYPE_CONDITION] = { - 0x38, - 0x14, - {gUnknown_08620220, gUnknown_08620224, gUnknown_0862023C} + .yStart = 56, + .deltaY = 20, + {sOptionsLabelGfx_Party, sOptionsLabelGfx_Search, sOptionsLabelGfx_Cancel} }, [POKENAV_MENU_TYPE_CONDITION_SEARCH] = { - 0x28, - 0x10, - {gUnknown_08620228, gUnknown_0862022C, gUnknown_08620230, gUnknown_08620234, gUnknown_08620238, gUnknown_0862023C} + .yStart = 40, + .deltaY = 16, + {sOptionsLabelGfx_Cool, sOptionsLabelGfx_Beauty, sOptionsLabelGfx_Cute, sOptionsLabelGfx_Smart, sOptionsLabelGfx_Tough, sOptionsLabelGfx_Cancel} }, }; @@ -287,7 +287,7 @@ static const struct SpriteTemplate sMenuOptionSpriteTemplate = .callback = SpriteCallbackDummy, }; -static const struct OamData gUnknown_08620364 = +static const struct OamData sBlueLightOamData = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -301,18 +301,18 @@ static const struct OamData gUnknown_08620364 = .paletteNum = 0, }; -static const struct SpriteTemplate gUnknown_0862036C = +static const struct SpriteTemplate sMatchCallBlueLightSpriteTemplate = { .tileTag = 1, .paletteTag = 3, - .oam = &gUnknown_08620364, + .oam = &sBlueLightOamData, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -static const struct ScanlineEffectParams gUnknown_08620384 = +static const struct ScanlineEffectParams sPokenavMainMenuScanlineEffectParams = { (void *)REG_ADDR_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, @@ -320,13 +320,13 @@ static const struct ScanlineEffectParams gUnknown_08620384 = 0 }; -static bool32 sub_81C98D4(void) +static bool32 PlayerHasTrainerRematches(void) { s32 i; for (i = 0; i < REMATCH_TABLE_ENTRIES; i++) { - if (sub_81CB0C8(i) == gMapHeader.regionMapSectionId + if (GetMatchTableMapSectionId(i) == gMapHeader.regionMapSectionId && IsRematchEntryRegistered(i) && gSaveBlock1Ptr->trainerRematches[i]) return TRUE; @@ -373,43 +373,43 @@ static struct Pokenav2Struct * OpenPokenavMenu(void) void CreateMenuHandlerLoopedTask(s32 ltIdx) { - struct Pokenav2Struct * state = GetSubstructPtr(2); + struct Pokenav2Struct * state = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); state->loopedTaskId = CreateLoopedTask(sMenuHandlerLoopTaskFuncs[ltIdx], 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsMenuHandlerLoopedTaskActive(void) { - struct Pokenav2Struct * state = GetSubstructPtr(2); + struct Pokenav2Struct * state = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); return state->isTaskActiveCB(); } void FreeMenuHandlerSubstruct2(void) { - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); - sub_81CA7F4(); + DestroyMovingDotsBgTask(); RemoveWindow(unk->optionDescWindowId); - sub_81C9FEC(); - sub_81CA994(); - FreePokenavSubstruct(2); + FreeAndDestroyMainMenuSprites(); + DestroyMenuOptionGlowTask(); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MENU_ICONS); } static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); return IsLoopedTaskActive(unk->loopedTaskId); } static u32 LoopedTask_OpenMenu(s32 state) { - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); switch (state) { case 0: - InitBgTemplates(gUnknown_08620194, ARRAY_COUNT(gUnknown_08620194)); + InitBgTemplates(sPokenavMainMenuBgTemplates, ARRAY_COUNT(sPokenavMainMenuBgTemplates)); DecompressAndCopyTileDataToVram(1, gPokenavMessageBox_Gfx, 0, 0, 0); SetBgTilemapBuffer(1, unk->bg1TilemapBuffer); CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); @@ -425,36 +425,36 @@ static u32 LoopedTask_OpenMenu(s32 state) case 1: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - DecompressAndCopyTileDataToVram(2, gUnknown_0861FD6C, 0, 0, 0); - DecompressAndCopyTileDataToVram(2, gUnknown_0861FFF4, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(gUnknown_0861FD4C, 0x20, 0x20); + DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(2, sPokenavDeviceBgTilemap, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(sPokenavDeviceBgPal, 0x20, 0x20); return LT_INC_AND_PAUSE; case 2: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - DecompressAndCopyTileDataToVram(3, gUnknown_0861FC98, 0, 0, 0); - DecompressAndCopyTileDataToVram(3, gUnknown_0861FCAC, 0, 0, 1); - CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78, 0x30, 0x20); + DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTiles, 0, 0, 0); + DecompressAndCopyTileDataToVram(3, sPokenavBgDotsTilemap, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal, 0x30, 0x20); if (GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION || GetPokenavMenuType() == POKENAV_MENU_TYPE_CONDITION_SEARCH) - sub_81CA850(); + ChangeBgDotsColorToPurple(); return LT_INC_AND_PAUSE; case 3: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; AddOptionDescriptionWindow(); - sub_81CA7D4(); + CreateMovingBgDotsTask(); return LT_INC_AND_CONTINUE; case 4: - sub_81C9FC4(); + LoadPokenavOptionPalettes(); return LT_INC_AND_CONTINUE; case 5: PrintCurrentOptionDescription(); CreateMenuOptionSprites(); - sub_81CA640(); + CreateMatchCallBlueLightSprite(); sub_81CA0C8(); return LT_INC_AND_PAUSE; case 6: - if (sub_81CA7C4()) + if (IsDma3ManagerBusyWithBgCopy_()) return LT_PAUSE; return LT_INC_AND_CONTINUE; case 7: @@ -487,22 +487,22 @@ static u32 LoopedTask_OpenMenu(s32 state) switch (GetPokenavMenuType()) { case POKENAV_MENU_TYPE_CONDITION_SEARCH: - sub_81C7FA0(7, FALSE, FALSE); + ShowLeftHeaderGfx(7, FALSE, FALSE); // fallthrough case POKENAV_MENU_TYPE_CONDITION: - sub_81C7FA0(1, FALSE, FALSE); + ShowLeftHeaderGfx(1, FALSE, FALSE); break; default: - sub_81C7FA0(0, FALSE, FALSE); + ShowLeftHeaderGfx(0, FALSE, FALSE); break; } - sub_81CA20C(); - sub_81CA92C(); + SetupCurrentMenuOptionsGfx(); + SetupPokenavMenuScanlineEffects(); return LT_INC_AND_CONTINUE; case 9: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; break; } @@ -514,15 +514,15 @@ static u32 LoopedTask_MoveMenuCursor(s32 state) switch (state) { case 0: - sub_81CAA3C(); - sub_81CA278(); + SetMenuOptionGlow(); + SetMenuOptionGfxParams_CursorMoved(); PrintCurrentOptionDescription(); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81CA7C4()) + if (IsDma3ManagerBusyWithBgCopy_()) return LT_PAUSE; break; } @@ -534,35 +534,35 @@ static u32 LoopedTask_OpenConditionMenu(s32 state) switch (state) { case 0: - sub_81CA9C8(); - sub_81CA2DC(); - sub_81C7FC4(0, 0); + ResetBldCnt(); + SetupPokenavMenuOptions(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, 0); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; sub_81CA0C8(); LoadLeftHeaderGfxForIndex(1); return LT_INC_AND_PAUSE; case 2: - sub_81CA20C(); - sub_81C7FA0(1, FALSE, FALSE); - sub_81CA818(); + SetupCurrentMenuOptionsGfx(); + ShowLeftHeaderGfx(1, FALSE, FALSE); + CreateBgDotPurplePalTask(); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - if (sub_81CA89C()) + if (IsTaskActive_UpdateBgDotsPalette()) return LT_PAUSE; - if (sub_81CA7C4()) + if (IsDma3ManagerBusyWithBgCopy_()) return LT_PAUSE; - sub_81CA9D8(); + InitMenuOptionGlow(); break; } return LT_FINISH; @@ -573,34 +573,34 @@ static u32 LoopedTask_ReturnToMainMenu(s32 state) switch (state) { case 0: - sub_81CA9C8(); - sub_81CA2DC(); - sub_81C7FC4(1, 0); + ResetBldCnt(); + SetupPokenavMenuOptions(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, 0); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; sub_81CA0C8(); LoadLeftHeaderGfxForIndex(0); return LT_INC_AND_PAUSE; case 2: - sub_81CA20C(); - sub_81C7FA0(0, FALSE, FALSE); - sub_81CA864(); + SetupCurrentMenuOptionsGfx(); + ShowLeftHeaderGfx(0, FALSE, FALSE); + CreateBgDotLightBluePalTask(); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - if (sub_81CA89C()) + if (IsTaskActive_UpdateBgDotsPalette()) return LT_PAUSE; - if (sub_81CA7C4()) + if (IsDma3ManagerBusyWithBgCopy_()) return LT_PAUSE; - sub_81CA9D8(); + InitMenuOptionGlow(); break; } return LT_FINISH; @@ -611,8 +611,8 @@ static u32 LoopedTask_OpenConditionSearchMenu(s32 state) switch (state) { case 0: - sub_81CA9C8(); - sub_81CA2DC(); + ResetBldCnt(); + SetupPokenavMenuOptions(); PlaySE(SE_SELECT); return LT_INC_AND_PAUSE; case 1: @@ -622,18 +622,18 @@ static u32 LoopedTask_OpenConditionSearchMenu(s32 state) sub_81CA0C8(); return LT_INC_AND_PAUSE; case 2: - sub_81CA20C(); - sub_81C7FA0(7, FALSE, FALSE); + SetupCurrentMenuOptionsGfx(); + ShowLeftHeaderGfx(7, FALSE, FALSE); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; - if (sub_81CA89C()) + if (IsTaskActive_UpdateBgDotsPalette()) return LT_PAUSE; - sub_81CA9D8(); + InitMenuOptionGlow(); break; } return LT_FINISH; @@ -644,27 +644,27 @@ static u32 LoopedTask_ReturnToConditionMenu(s32 state) switch (state) { case 0: - sub_81CA9C8(); - sub_81CA2DC(); - sub_81C7FC4(7, 0); + ResetBldCnt(); + SetupPokenavMenuOptions(); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, 0); return LT_INC_AND_PAUSE; case 1: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; sub_81CA0C8(); return LT_INC_AND_PAUSE; case 2: - sub_81CA20C(); + SetupCurrentMenuOptionsGfx(); PrintCurrentOptionDescription(); return LT_INC_AND_PAUSE; case 3: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81CA89C()) + if (IsTaskActive_UpdateBgDotsPalette()) return LT_PAUSE; - sub_81CA9D8(); + InitMenuOptionGlow(); break; } return LT_FINISH; @@ -714,19 +714,19 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) case 1: if (WaitForHelpBar()) return LT_PAUSE; - sub_81C7880(); - sub_81CA9C8(); - sub_81CA2DC(); + SlideMenuHeaderUp(); + ResetBldCnt(); + SetupPokenavMenuOptions(); switch (GetPokenavMenuType()) { case POKENAV_MENU_TYPE_CONDITION_SEARCH: - sub_81C7FC4(7, FALSE); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_SEARCH_MENU, FALSE); // fallthrough case POKENAV_MENU_TYPE_CONDITION: - sub_81C7FC4(1, FALSE); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_CONDITION_MENU, FALSE); break; default: - sub_81C7FC4(0, FALSE); + HideMainOrSubMenuLeftHeader(POKENAV_GFX_MAIN_MENU, FALSE); break; } PlaySE(SE_SELECT); @@ -734,7 +734,7 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) case 2: if (AreMenuOptionSpritesMoving()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; PokenavFadeScreen(0); return LT_INC_AND_PAUSE; @@ -746,16 +746,16 @@ static u32 LoopedTask_OpenPokenavFeature(s32 state) return LT_FINISH; } -static void sub_81C9FC4(void) +static void LoadPokenavOptionPalettes(void) { s32 i; - for (i = 0; i < NELEMS(gUnknown_086201C4); i++) - LoadCompressedSpriteSheet(&gUnknown_086201C4[i]); - Pokenav_AllocAndLoadPalettes(gUnknown_086201D4); + for (i = 0; i < NELEMS(sPokenavOptionsSpriteSheets); i++) + LoadCompressedSpriteSheet(&sPokenavOptionsSpriteSheets[i]); + Pokenav_AllocAndLoadPalettes(sPokenavOptionsSpritePalettes); } -static void sub_81C9FEC(void) +static void FreeAndDestroyMainMenuSprites(void) { FreeSpriteTilesByTag(3); FreeSpriteTilesByTag(1); @@ -765,14 +765,14 @@ static void sub_81C9FEC(void) FreeSpritePaletteByTag(7); FreeSpritePaletteByTag(8); FreeSpritePaletteByTag(3); - sub_81CA094(); - sub_81CA698(); + DestroyMenuOptionSprites(); + DestroyRematchBlueLightSpriteId(); } static void CreateMenuOptionSprites(void) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { @@ -786,10 +786,10 @@ static void CreateMenuOptionSprites(void) } } -static void sub_81CA094(void) +static void DestroyMenuOptionSprites(void) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { @@ -804,25 +804,25 @@ static void sub_81CA094(void) static void sub_81CA0C8(void) { s32 menuType = GetPokenavMenuType(); - sub_81CA0EC(gUnknown_08620240[menuType].unk4, gUnknown_08620240[menuType].unk0, gUnknown_08620240[menuType].unk2); + DrawOptionLabelGfx(sPokenavMenuOptionLabelGfx[menuType].tiles, sPokenavMenuOptionLabelGfx[menuType].yStart, sPokenavMenuOptionLabelGfx[menuType].deltaY); } -static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) +static void DrawOptionLabelGfx(const u16 *const *tiles, s32 yPos, s32 deltaY) { s32 i, j; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); s32 sp04 = GetSpriteTileStartByTag(3); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (*a0 != NULL) + if (*tiles != NULL) { for (j = 0; j < 4; j++) { - unk->iconSprites[i][j]->oam.tileNum = (*a0)[0] + sp04 + 8 * j; - unk->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*a0)[1] + 4); + unk->iconSprites[i][j]->oam.tileNum = (*tiles)[0] + sp04 + 8 * j; + unk->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*tiles)[1] + 4); unk->iconSprites[i][j]->invisible = TRUE; - unk->iconSprites[i][j]->pos1.y = a1; + unk->iconSprites[i][j]->pos1.y = yPos; unk->iconSprites[i][j]->pos1.x = 0x8c; unk->iconSprites[i][j]->pos2.x = 32 * j; } @@ -836,76 +836,78 @@ static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) } unk->iconVisible[i] = FALSE; } - a0++; - a1 += a2; + tiles++; + yPos += deltaY; } } -static void sub_81CA20C(void) +static void SetupCurrentMenuOptionsGfx(void) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); s32 r8 = GetPokenavCursorPos(); s32 r7 = 0; s32 r2; for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (unk->iconVisible[i]) + if (icons->iconVisible[i]) { if (r7++ == r8) { r2 = 0x82; - unk->cursorPos = i; + icons->cursorPos = i; } else r2 = 0x8c; - sub_81CA35C(unk->iconSprites[i], 0x100, r2, 0xC); - sub_81CA448(unk->iconSprites[i], FALSE); + SetMenuOptionGfxParamsInactive(icons->iconSprites[i], 0x100, r2, 0xC); + SetMenuOptionGfxInvisibility(icons->iconSprites[i], FALSE); } else - sub_81CA448(unk->iconSprites[i], TRUE); + { + SetMenuOptionGfxInvisibility(icons->iconSprites[i], TRUE); + } } } -static void sub_81CA278(void) +static void SetMenuOptionGfxParams_CursorMoved(void) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); - s32 r3 = GetPokenavCursorPos(); - s32 r5; + struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + s32 prevPos = GetPokenavCursorPos(); + s32 newPos; - for (i = 0, r5 = 0; i < MAX_POKENAV_MENUITEMS; i++) + for (i = 0, newPos = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (unk->iconVisible[i]) + if (icons->iconVisible[i]) { - if (r5 == r3) + if (newPos == prevPos) { - r5 = i; + newPos = i; break; } - r5++; + newPos++; } } - sub_81CA35C(unk->iconSprites[unk->cursorPos], 0x82, 0x8c, 0x4); - sub_81CA35C(unk->iconSprites[r5], 0x8c, 0x82, 0x4); - unk->cursorPos = r5; + SetMenuOptionGfxParamsInactive(icons->iconSprites[icons->cursorPos], 0x82, 0x8c, 0x4); + SetMenuOptionGfxParamsInactive(icons->iconSprites[newPos], 0x8c, 0x82, 0x4); + icons->cursorPos = newPos; } -static void sub_81CA2DC(void) +static void SetupPokenavMenuOptions(void) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct *optionIcons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (unk->iconVisible[i]) + if (optionIcons->iconVisible[i]) { - if (unk->cursorPos != i) - sub_81CA35C(unk->iconSprites[i], 0x8C, 0x100, 0x8); + if (optionIcons->cursorPos != i) + SetMenuOptionGfxParamsInactive(optionIcons->iconSprites[i], 0x8C, 0x100, 0x8); else - sub_81CA3B4(unk->iconSprites[i]); + SetMenuOptionGfxParamsActive(optionIcons->iconSprites[i]); } } } @@ -913,40 +915,40 @@ static void sub_81CA2DC(void) static bool32 AreMenuOptionSpritesMoving(void) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct *icons = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); for (i = 0; i < MAX_POKENAV_MENUITEMS; i++) { - if (unk->iconSprites[i][0]->callback != SpriteCallbackDummy) + if (icons->iconSprites[i][0]->callback != SpriteCallbackDummy) return TRUE; } - if (unk->otherIconsInMotion) + if (icons->otherIconsInMotion) return TRUE; return FALSE; } -static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) +static void SetMenuOptionGfxParamsInactive(struct Sprite ** sprites, s32 x, s32 a2, s32 a3) { s32 i; for (i = 0; i < 4; i++) { - (*sprites)->pos1.x = a1; + (*sprites)->pos1.x = x; (*sprites)->data[0] = a3; - (*sprites)->data[1] = 16 * (a2 - a1) / a3; - (*sprites)->data[2] = 16 * a1; + (*sprites)->data[1] = 16 * (a2 - x) / a3; + (*sprites)->data[2] = 16 * x; (*sprites)->data[7] = a2; (*sprites)->callback = sub_81CA474; sprites++; } } -static void sub_81CA3B4(struct Sprite ** sprites) +static void SetMenuOptionGfxParamsActive(struct Sprite ** sprites) { s32 i; - struct Pokenav2Struct * unk = GetSubstructPtr(2); + struct Pokenav2Struct * unk = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); u8 taskId; for (i = 0; i < 4; i++) @@ -968,13 +970,13 @@ static void sub_81CA3B4(struct Sprite ** sprites) unk->otherIconsInMotion++; } -static void sub_81CA448(struct Sprite ** sprites, bool32 a1) +static void SetMenuOptionGfxInvisibility(struct Sprite ** sprites, bool32 invisible) { s32 i; for (i = 0; i < 4; i++) { - (*sprites)->invisible = a1; + (*sprites)->invisible = invisible; sprites++; } } @@ -1078,7 +1080,7 @@ static void sub_81CA580(u8 taskId) data[4]++; if (data[4] == 12) { - ((struct Pokenav2Struct *)GetSubstructPtr(2))->otherIconsInMotion--; + ((struct Pokenav2Struct *)GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS))->otherIconsInMotion--; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x00, 0x10)); DestroyTask(taskId); } @@ -1089,24 +1091,24 @@ static void sub_81CA580(u8 taskId) data[0]--; } -static void sub_81CA640(void) +static void CreateMatchCallBlueLightSprite(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); - u8 spriteId = CreateSprite(&gUnknown_0862036C, 0x10, 0x60, 4); - ptr->field_028 = &gSprites[spriteId]; - if (sub_81C98D4()) - ptr->field_028->callback = sub_81CA6AC; + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + u8 spriteId = CreateSprite(&sMatchCallBlueLightSpriteTemplate, 0x10, 0x60, 4); + ptr->blueLightSpriteId = &gSprites[spriteId]; + if (PlayerHasTrainerRematches()) + ptr->blueLightSpriteId->callback = SpriteCB_BlinkingBlueLight; else - ptr->field_028->invisible = TRUE; + ptr->blueLightSpriteId->invisible = TRUE; } -static void sub_81CA698(void) +static void DestroyRematchBlueLightSpriteId(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); - DestroySprite(ptr->field_028); + struct Pokenav2Struct *ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + DestroySprite(ptr->blueLightSpriteId); } -static void sub_81CA6AC(struct Sprite * sprite) +static void SpriteCB_BlinkingBlueLight(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] > 8) @@ -1118,7 +1120,7 @@ static void sub_81CA6AC(struct Sprite * sprite) static void AddOptionDescriptionWindow(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); ptr->optionDescWindowId = AddWindow(&sOptionDescWindowTemplate); PutWindowTilemap(ptr->optionDescWindowId); @@ -1128,7 +1130,7 @@ static void AddOptionDescriptionWindow(void) static void PrintCurrentOptionDescription(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); int menuItem = GetCurrentMenuItemId(); const u8 * s = sPageDescriptions[menuItem]; u32 width = GetStringWidth(1, s, -1); @@ -1140,73 +1142,73 @@ static void PrintCurrentOptionDescription(void) // Can occur by obtaining a mon with a ribbon and then releasing all ribbon winners static void PrintNoRibbonWinners(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); const u8 * s = gText_NoRibbonWinners; u32 width = GetStringWidth(1, s, -1); FillWindowPixelBuffer(ptr->optionDescWindowId, PIXEL_FILL(6)); AddTextPrinterParameterized3(ptr->optionDescWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s); } -static bool32 sub_81CA7C4(void) +static bool32 IsDma3ManagerBusyWithBgCopy_(void) { return IsDma3ManagerBusyWithBgCopy(); } -static void sub_81CA7D4(void) +static void CreateMovingBgDotsTask(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); - ptr->bg3ScrollTaskId = CreateTask(sub_81CA808, 2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); + ptr->bg3ScrollTaskId = CreateTask(Task_MoveBgDots, 2); } -static void sub_81CA7F4(void) +static void DestroyMovingDotsBgTask(void) { - struct Pokenav2Struct * ptr = GetSubstructPtr(2); + struct Pokenav2Struct * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_MENU_ICONS); DestroyTask(ptr->bg3ScrollTaskId); } -static void sub_81CA808(u8 taskId) +static void Task_MoveBgDots(u8 taskId) { ChangeBgX(3, 0x80, 1); } -static void sub_81CA818(void) +static void CreateBgDotPurplePalTask(void) { - u8 taskId = CreateTask(sub_81CA8B0, 3); - SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 1)); - SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 7)); + u8 taskId = CreateTask(Task_UpdateBgDotsPalette, 3); + SetWordTaskArg(taskId, 1, (uintptr_t)(sPokenavBgDotsPal + 1)); + SetWordTaskArg(taskId, 3, (uintptr_t)(sPokenavBgDotsPal + 7)); } -static void sub_81CA850(void) +static void ChangeBgDotsColorToPurple(void) { - CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78 + 7, 0x31, 4); + CopyPaletteIntoBufferUnfaded(sPokenavBgDotsPal + 7, 0x31, 4); } -static void sub_81CA864(void) +static void CreateBgDotLightBluePalTask(void) { - u8 taskId = CreateTask(sub_81CA8B0, 3); - SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 7)); - SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 1)); + u8 taskId = CreateTask(Task_UpdateBgDotsPalette, 3); + SetWordTaskArg(taskId, 1, (uintptr_t)(sPokenavBgDotsPal + 7)); + SetWordTaskArg(taskId, 3, (uintptr_t)(sPokenavBgDotsPal + 1)); } -static bool32 sub_81CA89C(void) +static bool32 IsTaskActive_UpdateBgDotsPalette(void) { - return FuncIsActiveTask(sub_81CA8B0); + return FuncIsActiveTask(Task_UpdateBgDotsPalette); } -static void sub_81CA8B0(u8 taskId) +static void Task_UpdateBgDotsPalette(u8 taskId) { u16 sp8[2]; s16 * data = gTasks[taskId].data; const u16 * pal1 = (const u16 *)GetWordTaskArg(taskId, 1); const u16 * pal2 = (const u16 *)GetWordTaskArg(taskId, 3); - sub_81C79BC(pal1, pal2, 2, 12, ++data[0], sp8); + PokenavCopyPalette(pal1, pal2, 2, 12, ++data[0], sp8); LoadPalette(sp8, 0x31, 4); if (data[0] == 12) DestroyTask(taskId); } -static void sub_81CA914(void) +static void VBlankCB_PokenavMainMenu(void) { TransferPlttBuffer(); LoadOam(); @@ -1214,7 +1216,7 @@ static void sub_81CA914(void) ScanlineEffect_InitHBlankDmaTransfer(); } -static void sub_81CA92C(void) +static void SetupPokenavMenuScanlineEffects(void) { SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 0); @@ -1223,33 +1225,33 @@ static void sub_81CA92C(void) SetGpuRegBits(REG_OFFSET_WINOUT, 0x1F); SetGpuRegBits(REG_OFFSET_WIN0V, 0xA0); ScanlineEffect_Stop(); - sub_81CAA3C(); - ScanlineEffect_SetParams(gUnknown_08620384); - SetVBlankCallback_(sub_81CA914); - CreateTask(sub_81CA9EC, 3); + SetMenuOptionGlow(); + ScanlineEffect_SetParams(sPokenavMainMenuScanlineEffectParams); + SetVBlankCallback_(VBlankCB_PokenavMainMenu); + CreateTask(Task_CurrentMenuOptionGlow, 3); } -static void sub_81CA994(void) +static void DestroyMenuOptionGlowTask(void) { SetGpuReg(REG_OFFSET_BLDCNT, 0); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); ScanlineEffect_Stop(); - DestroyTask(FindTaskIdByFunc(sub_81CA9EC)); + DestroyTask(FindTaskIdByFunc(Task_CurrentMenuOptionGlow)); SetPokenavVBlankCallback(); } -static void sub_81CA9C8(void) +static void ResetBldCnt(void) { SetGpuReg(REG_OFFSET_BLDCNT, 0); } -static void sub_81CA9D8(void) +static void InitMenuOptionGlow(void) { - sub_81CAA3C(); + SetMenuOptionGlow(); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); } -static void sub_81CA9EC(u8 taskId) +static void Task_CurrentMenuOptionGlow(u8 taskId) { s16 * data = gTasks[taskId].data; data[0]++; @@ -1262,18 +1264,18 @@ static void sub_81CA9EC(u8 taskId) } } -static void sub_81CAA3C(void) +static void SetMenuOptionGlow(void) { int menuType = GetPokenavMenuType(); int cursorPos = GetPokenavCursorPos(); - int r4 = gUnknown_08620240[menuType].unk2 * cursorPos + gUnknown_08620240[menuType].unk0 - 8; + int r4 = sPokenavMenuOptionLabelGfx[menuType].deltaY * cursorPos + sPokenavMenuOptionLabelGfx[menuType].yStart - 8; CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[0][r4], 0x20); CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[1][r4], 0x20); } -void sub_81CAADC(void) +void ResetBldCnt_(void) { - sub_81CA9C8(); + ResetBldCnt(); } diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c index 394b409076..2dd2e44088 100755 --- a/src/pokenav_region_map.c +++ b/src/pokenav_region_map.c @@ -170,11 +170,11 @@ static const struct SpriteTemplate sCityZoomTextSpriteTemplate = u32 PokenavCallback_Init_RegionMap(void) { - struct Pokenav5Struct *state = AllocSubstruct(3, sizeof(struct Pokenav5Struct)); + struct Pokenav5Struct *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_STATE, sizeof(struct Pokenav5Struct)); if (!state) return FALSE; - if (!AllocSubstruct(16, sizeof(struct RegionMap))) + if (!AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP, sizeof(struct RegionMap))) return FALSE; state->zoomDisabled = IsEventIslandMapSecId(gMapHeader.regionMapSectionId); @@ -189,13 +189,13 @@ u32 PokenavCallback_Init_RegionMap(void) void FreeRegionMapSubstruct1(void) { gSaveBlock2Ptr->regionMapZoom = IsRegionMapZoomed(); - FreePokenavSubstruct(16); - FreePokenavSubstruct(3); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_REGION_MAP); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_STATE); } u32 GetRegionMapCallback(void) { - struct Pokenav5Struct *state = GetSubstructPtr(3); + struct Pokenav5Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); return state->callback(state); } @@ -235,13 +235,13 @@ static u32 GetExitRegionMapMenuId(struct Pokenav5Struct *state) bool32 GetZoomDisabled(void) { - struct Pokenav5Struct *state = GetSubstructPtr(3); + struct Pokenav5Struct *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_STATE); return state->zoomDisabled; } bool32 OpenPokenavRegionMap(void) { - struct Pokenav5Struct_2 *state = AllocSubstruct(4, sizeof(struct Pokenav5Struct_2)); + struct Pokenav5Struct_2 *state = AllocSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM, sizeof(struct Pokenav5Struct_2)); if (!state) return FALSE; @@ -252,25 +252,25 @@ bool32 OpenPokenavRegionMap(void) void CreateRegionMapLoopedTask(s32 index) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); state->loopTaskId = CreateLoopedTask(sRegionMapLoopTaskFuncs[index], 1); state->isTaskActiveCB = GetCurrentLoopedTaskActive; } bool32 IsRegionMapLoopedTaskActive(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); return state->isTaskActiveCB(); } void FreeRegionMapSubstruct2(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); FreeRegionMapIconResources(); FreeCityZoomViewGfx(); RemoveWindow(state->infoWindowId); - FreePokenavSubstruct(16); - FreePokenavSubstruct(4); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_REGION_MAP); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); SetPokenavVBlankCallback(); SetBgMode(0); } @@ -285,7 +285,7 @@ static void VBlankCB_RegionMap(void) static bool32 GetCurrentLoopedTaskActive(void) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); return IsLoopedTaskActive(state->loopTaskId); } @@ -301,7 +301,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) { int menuGfxId; struct RegionMap *regionMap; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -311,7 +311,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) HideBg(3); SetBgMode(1); InitBgTemplates(sRegionMapBgTemplates, ARRAY_COUNT(sRegionMapBgTemplates) - 1); - regionMap = GetSubstructPtr(16); + regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP); InitRegionMapData(regionMap, &sRegionMapBgTemplates[1], ShouldOpenRegionMapZoomed()); LoadCityZoomViewGfx(); return LT_INC_AND_PAUSE; @@ -361,11 +361,11 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) menuGfxId = POKENAV_GFX_MAP_MENU_ZOOMED_IN; LoadLeftHeaderGfxForIndex(menuGfxId); - sub_81C7FA0(menuGfxId, 1, 1); + ShowLeftHeaderGfx(menuGfxId, 1, 1); PokenavFadeScreen(1); return LT_INC_AND_PAUSE; case 7: - if (IsPaletteFadeActive() || sub_81C8010()) + if (IsPaletteFadeActive() || AreLeftHeaderSpritesMoving()) return LT_PAUSE; return LT_INC_AND_CONTINUE; default: @@ -375,7 +375,7 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState) static u32 LoopedTask_UpdateInfoAfterCursorMove(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -409,7 +409,7 @@ static u32 LoopedTask_RegionMapZoomOut(s32 taskState) if (WaitForHelpBar()) return LT_PAUSE; - sub_81C7E14(POKENAV_GFX_MAP_MENU_ZOOMED_OUT); + UpdateRegionMapRightHeaderTiles(POKENAV_GFX_MAP_MENU_ZOOMED_OUT); break; } @@ -418,7 +418,7 @@ static u32 LoopedTask_RegionMapZoomOut(s32 taskState) static u32 LoopedTask_RegionMapZoomIn(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); switch (taskState) { case 0: @@ -442,7 +442,7 @@ static u32 LoopedTask_RegionMapZoomIn(s32 taskState) if (WaitForHelpBar()) return LT_PAUSE; - sub_81C7E14(POKENAV_GFX_MAP_MENU_ZOOMED_IN); + UpdateRegionMapRightHeaderTiles(POKENAV_GFX_MAP_MENU_ZOOMED_IN); break; } @@ -461,8 +461,8 @@ static u32 LoopedTask_ExitRegionMap(s32 taskState) if (IsPaletteFadeActive()) return LT_PAUSE; - sub_81C7FDC(); - sub_81C78A0(); + SetLeftHeaderSpritesInvisibility(); + SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 2: if (MainMenuLoopedTaskIsBusy()) @@ -490,7 +490,7 @@ static void LoadCityZoomViewGfx(void) static void FreeCityZoomViewGfx(void) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); FreeSpriteTilesByTag(6); FreeSpritePaletteByTag(11); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) @@ -527,7 +527,7 @@ static bool32 TryFreeTempTileDataBuffers(void) static void UpdateMapSecInfoWindow(struct Pokenav5Struct_2 *state) { - struct RegionMap *regionMap = GetSubstructPtr(16); + struct RegionMap *regionMap = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP); switch (regionMap->mapSecType) { case MAPSECTYPE_CITY_CANFLY: @@ -619,7 +619,7 @@ static bool32 IsDecompressCityMapsActive(void) static u32 LoopedTask_DecompressCityMaps(s32 taskState) { - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); if (taskState < NUM_CITY_MAPS) { LZ77UnCompWram(sPokenavCityMaps[taskState].tilemap, state->cityZoomPics[taskState]); @@ -662,7 +662,7 @@ static void CreateCityZoomTextSprites(void) int i; int y; struct Sprite *sprite; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); // When not zoomed in the text is still created but its pushed off screen if (!IsRegionMapZoomed()) @@ -722,7 +722,7 @@ static void SpriteCB_CityZoomText(struct Sprite *sprite) static void UpdateCityZoomTextPosition(void) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); int y = 132 - (GetBgY(1) >> 8); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) state->cityZoomTextSprites[i]->pos1.y = y; @@ -731,7 +731,7 @@ static void UpdateCityZoomTextPosition(void) static void SetCityZoomTextInvisibility(bool32 invisible) { int i; - struct Pokenav5Struct_2 *state = GetSubstructPtr(4); + struct Pokenav5Struct_2 *state = GetSubstructPtr(POKENAV_SUBSTRUCT_REGION_MAP_ZOOM); for (i = 0; i < (int)ARRAY_COUNT(state->cityZoomTextSprites); i++) state->cityZoomTextSprites[i]->invisible = invisible; } diff --git a/src/pokenav_ribbons_1.c b/src/pokenav_ribbons_1.c index fd47b27ad4..9c171dd45e 100644 --- a/src/pokenav_ribbons_1.c +++ b/src/pokenav_ribbons_1.c @@ -8,16 +8,28 @@ #include "international_string_util.h" #include "constants/songs.h" +enum +{ + RIBBONS_MON_LIST_FUNC_NONE, + RIBBONS_MON_LIST_FUNC_MOVE_UP, + RIBBONS_MON_LIST_FUNC_MOVE_DOWN, + RIBBONS_MON_LIST_FUNC_PAGE_UP, + RIBBONS_MON_LIST_FUNC_PAGE_DOWN, + RIBBONS_MON_LIST_FUNC_EXIT, + RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY +}; + + struct PokenavSub9 { - u32 (*unk0)(struct PokenavSub9*); + u32 (*callback)(struct PokenavSub9*); u32 loopedTaskId; u16 winid; - s32 unkC; - s32 unk10; - u32 unk14; - u32 unk18; - struct PokenavSub18 *unk1C; + s32 boxId; + s32 monId; + u32 changeBgs; + u32 saveMonList; + struct PokenavSub18 *monList; }; struct PokenavSub10 @@ -25,46 +37,46 @@ struct PokenavSub10 bool32 (*callback)(void); u32 ltid; u16 winid; - bool32 unkC; + bool32 fromSummary; u8 buff[BG_SCREEN_SIZE]; }; -static u32 sub_81CFA68(struct PokenavSub9 *structPtr); -static u32 sub_81CFA88(struct PokenavSub9 *structPtr); -static u32 sub_81CFB08(struct PokenavSub9 *structPtr); +static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr); +static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr); +static u32 RibbonsMonMenu_ReturnToMainMenu(struct PokenavSub9 *structPtr); static u32 sub_81CFB10(struct PokenavSub9 *structPtr); -static u32 sub_81CFB8C(s32 state); -static u32 sub_81CFC2C(s32 state); -static u32 sub_81CFC40(s32 state); -static u32 sub_81CFB74(s32 state); +static u32 BuildPartyMonRibbonList(s32 state); +static u32 InitBoxMonRibbonList(s32 state); +static u32 BuildBoxMonRibbonList(s32 state); +static u32 GetMonRibbonListLoopTaskFunc(s32 state); static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item); -static u32 sub_81CFEB8(s32 state); -static bool32 sub_81CFE84(void); -static u32 sub_81CFFFC(s32 state); -static u32 sub_81D0074(s32 state); -static u32 sub_81D00EC(s32 state); -static u32 sub_81D0164(s32 state); -static u32 sub_81D01DC(s32 state); -static u32 sub_81D021C(s32 state); +static u32 LoopedTask_OpenRibbonsMonList(s32 state); +static bool32 GetRibbonsMonCurrentLoopedTaskActive(void); +static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state); +static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state); +static u32 LoopedTask_RibbonsListMovePageUp(s32 state); +static u32 LoopedTask_RibbonsListMovePageDown(s32 state); +static u32 LoopedTask_RibbonsListReturnToMainMenu(s32 state); +static u32 LoopedTask_RibbonsListOpenSummary(s32 state); static void sub_81D02B0(s32 windowId, s32 val1, s32 val2); -static void sub_81D024C(struct PokenavSub10 *ptr); +static void AddRibbonsMonListWindow(struct PokenavSub10 *ptr); static void sub_81D0288(struct PokenavSub10 *ptr); -static void sub_81D0304(void); +static void InitMonRibbonPokenavListMenuTemplate(void); static void BufferRibbonMonInfoText(struct PokenavMonList *, u8 *); -static const LoopedTask gUnknown_086235D8[] = +static const LoopedTask sMonRibbonListLoopTaskFuncs[] = { - sub_81CFB8C, - sub_81CFC2C, - sub_81CFC40 + BuildPartyMonRibbonList, + InitBoxMonRibbonList, + BuildBoxMonRibbonList }; -static const u16 gUnknown_086235E4[] = INCBIN_U16("graphics/pokenav/ui_ribbons.gbapal"); -static const u32 gUnknown_08623604[] = INCBIN_U32("graphics/pokenav/ui_ribbons.4bpp.lz"); -static const u32 gUnknown_086236CC[] = INCBIN_U32("graphics/pokenav/ui_ribbons.bin.lz"); +static const u16 sMonRibbonListFramePal[] = INCBIN_U16("graphics/pokenav/ui_ribbons.gbapal"); +static const u32 sMonRibbonListFrameTiles[] = INCBIN_U32("graphics/pokenav/ui_ribbons.4bpp.lz"); +static const u32 sMonRibbonListFrameTilemap[] = INCBIN_U32("graphics/pokenav/ui_ribbons.bin.lz"); static const u16 gUnknown_08623790[] = INCBIN_U16("graphics/pokenav/8623790.gbapal"); -static const struct BgTemplate gUnknown_086237B0[] = +static const struct BgTemplate sMonRibbonListBgTemplates[] = { { .bg = 1, @@ -85,18 +97,18 @@ static const struct BgTemplate gUnknown_086237B0[] = } }; -static const LoopedTask gUnknown_086237B8[] = +static const LoopedTask sRibbonsMonMenuLoopTaskFuncs[] = { - NULL, - sub_81CFFFC, - sub_81D0074, - sub_81D00EC, - sub_81D0164, - sub_81D01DC, - sub_81D021C + [RIBBONS_MON_LIST_FUNC_NONE] = NULL, + [RIBBONS_MON_LIST_FUNC_MOVE_UP] = LoopedTask_RibbonsListMoveCursorUp, + [RIBBONS_MON_LIST_FUNC_MOVE_DOWN] = LoopedTask_RibbonsListMoveCursorDown, + [RIBBONS_MON_LIST_FUNC_PAGE_UP] = LoopedTask_RibbonsListMovePageUp, + [RIBBONS_MON_LIST_FUNC_PAGE_DOWN] = LoopedTask_RibbonsListMovePageDown, + [RIBBONS_MON_LIST_FUNC_EXIT] = LoopedTask_RibbonsListReturnToMainMenu, + [RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY] = LoopedTask_RibbonsListOpenSummary }; -static const struct WindowTemplate gUnknown_086237D4 = +static const struct WindowTemplate sRibbonsMonListWindowTemplate = { .bg = 1, .tilemapLeft = 1, @@ -111,135 +123,136 @@ static const u8 sText_MaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHIT static const u8 sText_FemaleSymbol[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sText_NoGenderSymbol[] = _("{UNK_SPACER}"); -bool32 PokenavCallback_Init_12(void) +bool32 PokenavCallback_Init_MonRibbonList(void) { - struct PokenavSub9 *structPtr = AllocSubstruct(9, sizeof(struct PokenavSub9)); + struct PokenavSub9 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct PokenavSub9)); if (structPtr == NULL) return FALSE; - structPtr->unk1C = AllocSubstruct(18, sizeof(struct PokenavSub18)); - if (structPtr->unk1C == NULL) + structPtr->monList = AllocSubstruct(POKENAV_SUBSTRUCT_MON_LIST, sizeof(struct PokenavSub18)); + if (structPtr->monList == NULL) return FALSE; - structPtr->unk0 = sub_81CFA68; - structPtr->loopedTaskId = CreateLoopedTask(sub_81CFB74, 1); - structPtr->unk14 = 0; + structPtr->callback = HandleRibbonsMonListInput_WaitListInit; + structPtr->loopedTaskId = CreateLoopedTask(GetMonRibbonListLoopTaskFunc, 1); + structPtr->changeBgs = 0; return TRUE; } -bool32 PokenavCallback_Init_14(void) +bool32 PokenavCallback_Init_RibbonsMonListFromSummary(void) { - struct PokenavSub9 *structPtr = AllocSubstruct(9, sizeof(struct PokenavSub9)); + struct PokenavSub9 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST, sizeof(struct PokenavSub9)); if (structPtr == NULL) return FALSE; - structPtr->unk1C = GetSubstructPtr(18); - structPtr->unk0 = sub_81CFA88; - structPtr->unk14 = 1; + structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + structPtr->callback = HandleRibbonsMonListInput; + structPtr->changeBgs = 1; return TRUE; } -u32 sub_81CFA34(void) +u32 GetRibbonsMonListCallback(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(9); - return structPtr->unk0(structPtr); + struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return structPtr->callback(structPtr); } -void sub_81CFA48(void) +void FreeRibbonsMonList1(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(9); - if (!structPtr->unk18) - FreePokenavSubstruct(18); - FreePokenavSubstruct(9); + struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + if (!structPtr->saveMonList) + FreePokenavSubstruct(POKENAV_SUBSTRUCT_MON_LIST); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); } -static u32 sub_81CFA68(struct PokenavSub9 *structPtr) +static u32 HandleRibbonsMonListInput_WaitListInit(struct PokenavSub9 *structPtr) { if (!IsLoopedTaskActive(structPtr->loopedTaskId)) - structPtr->unk0 = sub_81CFA88; + structPtr->callback = HandleRibbonsMonListInput; return 0; } -static u32 sub_81CFA88(struct PokenavSub9 *structPtr) +static u32 HandleRibbonsMonListInput(struct PokenavSub9 *structPtr) { if (JOY_REPEAT(DPAD_UP)) - return 1; + return RIBBONS_MON_LIST_FUNC_MOVE_UP; if (JOY_REPEAT(DPAD_DOWN)) - return 2; + return RIBBONS_MON_LIST_FUNC_MOVE_DOWN; if (JOY_NEW(DPAD_LEFT)) - return 3; + return RIBBONS_MON_LIST_FUNC_PAGE_UP; if (JOY_NEW(DPAD_RIGHT)) - return 4; + return RIBBONS_MON_LIST_FUNC_PAGE_DOWN; if (JOY_NEW(B_BUTTON)) { - structPtr->unk18 = 0; - structPtr->unk0 = sub_81CFB08; - return 5; + structPtr->saveMonList = 0; + structPtr->callback = RibbonsMonMenu_ReturnToMainMenu; + return RIBBONS_MON_LIST_FUNC_EXIT; } if (JOY_NEW(A_BUTTON)) { - structPtr->unk1C->unk2 = GetSelectedMatchCall(); - structPtr->unk18 = 1; - structPtr->unk0 = sub_81CFB10; - return 6; + structPtr->monList->currIndex = GetSelectedPokenavListIndex(); + structPtr->saveMonList = 1; + structPtr->callback = sub_81CFB10; + return RIBBONS_MON_LIST_FUNC_OPEN_RIBBONS_SUMMARY; } - return 0; + return RIBBONS_MON_LIST_FUNC_NONE; } -static u32 sub_81CFB08(struct PokenavSub9 *structPtr) +static u32 RibbonsMonMenu_ReturnToMainMenu(struct PokenavSub9 *structPtr) { return POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS; } static u32 sub_81CFB10(struct PokenavSub9 *structPtr) { - return POKENAV_MENU_D; + return POKENAV_RIBBONS_SUMMARY_SCREEN; } -static u32 sub_81CFB18(void) +static u32 UpdateMonListBgs(void) { - struct PokenavSub9 *structPtr = GetSubstructPtr(9); - return structPtr->unk14; + struct PokenavSub9 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return structPtr->changeBgs; } -static struct PokenavMonList * sub_81CFB28(void) +static struct PokenavMonList *GetMonRibbonMonListData(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - return ptr->unk1C->unk4; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return ptr->monList->monData; } -static s32 sub_81CFB38(void) +static s32 GetRibbonsMonListCount(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - return ptr->unk1C->unk0; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return ptr->monList->listCount; } -static s32 sub_81CFB48(void) +//unused +static s32 GetMonRibbonSelectedMonData(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - s32 idx = GetSelectedMatchCall(); - return ptr->unk1C->unk4[idx].data; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + s32 idx = GetSelectedPokenavListIndex(); + return ptr->monList->monData[idx].data; } -static s32 sub_81CFB64(void) +static s32 GetRibbonListMenuCurrIndex(void) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - return ptr->unk1C->unk2; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + return ptr->monList->currIndex; } -static u32 sub_81CFB74(s32 state) +static u32 GetMonRibbonListLoopTaskFunc(s32 state) { - return gUnknown_086235D8[state](state); + return sMonRibbonListLoopTaskFuncs[state](state); } -static u32 sub_81CFB8C(s32 state) +static u32 BuildPartyMonRibbonList(s32 state) { s32 i; struct PokenavMonList item; - struct PokenavSub9 * ptr = GetSubstructPtr(9); + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); - ptr->unk1C->unk0 = 0; - ptr->unk1C->unk2 = 0; + ptr->monList->listCount = 0; + ptr->monList->currIndex = 0; item.boxId = TOTAL_BOXES_COUNT; for (i = 0; i < PARTY_SIZE; i++) { @@ -261,19 +274,19 @@ static u32 sub_81CFB8C(s32 state) return LT_INC_AND_CONTINUE; } -static u32 sub_81CFC2C(s32 state) +static u32 InitBoxMonRibbonList(s32 state) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - ptr->unk10 = 0; - ptr->unkC = 0; + struct PokenavSub9 *ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + ptr->monId = 0; + ptr->boxId = 0; return LT_INC_AND_CONTINUE; } -static u32 sub_81CFC40(s32 state) +static u32 BuildBoxMonRibbonList(s32 state) { - struct PokenavSub9 * ptr = GetSubstructPtr(9); - s32 boxId = ptr->unkC; - s32 monId = ptr->unk10; + struct PokenavSub9 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_LIST); + s32 boxId = ptr->boxId; + s32 monId = ptr->monId; s32 boxCount = 0; struct PokenavMonList item; @@ -296,8 +309,8 @@ static u32 sub_81CFC40(s32 state) monId++; if (boxCount > TOTAL_BOXES_COUNT) { - ptr->unkC = boxId; - ptr->unk10 = monId; + ptr->boxId = boxId; + ptr->monId = monId; return LT_CONTINUE; } } @@ -305,37 +318,38 @@ static u32 sub_81CFC40(s32 state) boxId++; } - ptr->unk14 = 1; + ptr->changeBgs = 1; return LT_FINISH; } static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *item) { u32 left = 0; - u32 right = structPtr->unk1C->unk0; + u32 right = structPtr->monList->listCount; u32 insertionIdx = left + (right - left) / 2; while (right != insertionIdx) { - if (item->data > structPtr->unk1C->unk4[insertionIdx].data) + if (item->data > structPtr->monList->monData[insertionIdx].data) right = insertionIdx; else left = insertionIdx + 1; insertionIdx = left + (right - left) / 2; } - for (right = structPtr->unk1C->unk0; right > insertionIdx; right--) - structPtr->unk1C->unk4[right] = structPtr->unk1C->unk4[right - 1]; - structPtr->unk1C->unk4[insertionIdx] = *item; - structPtr->unk1C->unk0++; + for (right = structPtr->monList->listCount; right > insertionIdx; right--) + structPtr->monList->monData[right] = structPtr->monList->monData[right - 1]; + structPtr->monList->monData[insertionIdx] = *item; + structPtr->monList->listCount++; } -static bool32 sub_81CFD58(void) +//unused +static bool32 Unused_PlayerHasRibbonsMon(void) { s32 i, j; for (i = 0; i < PARTY_SIZE; i++) { - struct Pokemon * mon = &gPlayerParty[i]; + struct Pokemon *mon = &gPlayerParty[i]; if (!GetMonData(mon, MON_DATA_SANITY_HAS_SPECIES)) continue; if (GetMonData(mon, MON_DATA_SANITY_IS_EGG)) @@ -358,72 +372,72 @@ static bool32 sub_81CFD58(void) return FALSE; } -bool32 sub_81CFDD0(void) +bool32 OpenRibbonsMonList(void) { - struct PokenavSub10 * ptr = AllocSubstruct(10, sizeof(struct PokenavSub10)); + struct PokenavSub10 *ptr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct PokenavSub10)); if (ptr == NULL) return FALSE; - ptr->ltid = CreateLoopedTask(sub_81CFEB8, 1); - ptr->callback = sub_81CFE84; - ptr->unkC = FALSE; + ptr->ltid = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); + ptr->callback = GetRibbonsMonCurrentLoopedTaskActive; + ptr->fromSummary = FALSE; return TRUE; } -bool32 sub_81CFE08(void) +bool32 OpenRibbonsMonListFromRibbonsSummary(void) { - struct PokenavSub10 * ptr = AllocSubstruct(10, sizeof(struct PokenavSub10)); - if (ptr == NULL) + struct PokenavSub10 *monMenu = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU, sizeof(struct PokenavSub10)); + if (monMenu == NULL) return FALSE; - ptr->ltid = CreateLoopedTask(sub_81CFEB8, 1); - ptr->callback = sub_81CFE84; - ptr->unkC = TRUE; + monMenu->ltid = CreateLoopedTask(LoopedTask_OpenRibbonsMonList, 1); + monMenu->callback = GetRibbonsMonCurrentLoopedTaskActive; + monMenu->fromSummary = TRUE; return TRUE; } -void sub_81CFE40(s32 idx) +void CreateRibbonsMonListLoopedTask(s32 idx) { - struct PokenavSub10 * ptr = GetSubstructPtr(10); - ptr->ltid = CreateLoopedTask(gUnknown_086237B8[idx], 1); - ptr->callback = sub_81CFE84; + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + monMenu->ltid = CreateLoopedTask(sRibbonsMonMenuLoopTaskFuncs[idx], 1); + monMenu->callback = GetRibbonsMonCurrentLoopedTaskActive; } -bool32 sub_81CFE70(void) +bool32 IsRibbonsMonListLoopedTaskActive(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(10); - return ptr->callback(); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); + return monMenu->callback(); } -bool32 sub_81CFE84(void) +bool32 GetRibbonsMonCurrentLoopedTaskActive(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(10); + struct PokenavSub10 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); return IsLoopedTaskActive(ptr->ltid); } -void sub_81CFE98(void) +void FreeRibbonsMonList2(void) { - struct PokenavSub10 * ptr = GetSubstructPtr(10); + struct PokenavSub10 * ptr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); sub_81C8234(); RemoveWindow(ptr->winid); - FreePokenavSubstruct(10); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); } -static u32 sub_81CFEB8(s32 state) +static u32 LoopedTask_OpenRibbonsMonList(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: - InitBgTemplates(gUnknown_086237B0, NELEMS(gUnknown_086237B0)); - DecompressAndCopyTileDataToVram(1, gUnknown_08623604, 0, 0, 0); - SetBgTilemapBuffer(1, unk->buff); - CopyToBgTilemapBuffer(1, gUnknown_086236CC, 0, 0); - CopyPaletteIntoBufferUnfaded(gUnknown_086235E4, 0x10, 0x20); + InitBgTemplates(sMonRibbonListBgTemplates, NELEMS(sMonRibbonListBgTemplates)); + DecompressAndCopyTileDataToVram(1, sMonRibbonListFrameTiles, 0, 0, 0); + SetBgTilemapBuffer(1, monMenu->buff); + CopyToBgTilemapBuffer(1, sMonRibbonListFrameTilemap, 0, 0); + CopyPaletteIntoBufferUnfaded(sMonRibbonListFramePal, 0x10, 0x20); CopyBgTilemapBufferToVram(1); return LT_INC_AND_PAUSE; case 1: if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; - if (!sub_81CFB18()) + if (!UpdateMonListBgs()) return LT_PAUSE; ChangeBgX(1, 0, 0); ChangeBgY(1, 0, 0); @@ -433,12 +447,12 @@ static u32 sub_81CFEB8(s32 state) if (FreeTempTileDataBuffersIfPossible()) return LT_PAUSE; CopyPaletteIntoBufferUnfaded(gUnknown_08623790, 0x20, 0x20); - sub_81D0304(); + InitMonRibbonPokenavListMenuTemplate(); return LT_INC_AND_PAUSE; case 3: if (sub_81C8224()) return LT_PAUSE; - sub_81D024C(unk); + AddRibbonsMonListWindow(monMenu); return LT_INC_AND_PAUSE; case 4: if (FreeTempTileDataBuffersIfPossible()) @@ -447,25 +461,25 @@ static u32 sub_81CFEB8(s32 state) HideBg(3); PrintHelpBarText(HELPBAR_RIBBONS_MON_LIST); PokenavFadeScreen(1); - if (!unk->unkC) + if (!monMenu->fromSummary) { - LoadLeftHeaderGfxForIndex(2); - sub_81C7FA0(2, 1, 0); + LoadLeftHeaderGfxForIndex(POKENAV_GFX_RIBBONS_MENU); + ShowLeftHeaderGfx(POKENAV_GFX_RIBBONS_MENU, 1, 0); } return LT_INC_AND_PAUSE; case 5: if (IsPaletteFadeActive()) return LT_PAUSE; - if (sub_81C8010()) + if (AreLeftHeaderSpritesMoving()) return LT_PAUSE; break; } return LT_FINISH; } -static u32 sub_81CFFFC(s32 state) +static u32 LoopedTask_RibbonsListMoveCursorUp(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: @@ -482,11 +496,11 @@ static u32 sub_81CFFFC(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(unk); + sub_81D0288(monMenu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -496,9 +510,9 @@ static u32 sub_81CFFFC(s32 state) return LT_FINISH; } -static u32 sub_81D0074(s32 state) +static u32 LoopedTask_RibbonsListMoveCursorDown(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: @@ -515,11 +529,11 @@ static u32 sub_81D0074(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(unk); + sub_81D0288(monMenu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -529,9 +543,9 @@ static u32 sub_81D0074(s32 state) return LT_FINISH; } -static u32 sub_81D00EC(s32 state) +static u32 LoopedTask_RibbonsListMovePageUp(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: @@ -548,11 +562,11 @@ static u32 sub_81D00EC(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(unk); + sub_81D0288(monMenu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -562,9 +576,9 @@ static u32 sub_81D00EC(s32 state) return LT_FINISH; } -static u32 sub_81D0164(s32 state) +static u32 LoopedTask_RibbonsListMovePageDown(s32 state) { - struct PokenavSub10 * unk = GetSubstructPtr(10); + struct PokenavSub10 *monMenu = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_MON_MENU); switch (state) { case 0: @@ -581,11 +595,11 @@ static u32 sub_81D0164(s32 state) } return LT_INC_AND_PAUSE; case 1: - if (sub_81C8630()) + if (IsMonListLoopedTaskActive()) return LT_PAUSE; // fallthrough case 2: - sub_81D0288(unk); + sub_81D0288(monMenu); return LT_INC_AND_PAUSE; case 3: if (IsDma3ManagerBusyWithBgCopy()) @@ -595,27 +609,27 @@ static u32 sub_81D0164(s32 state) return LT_FINISH; } -static u32 sub_81D01DC(s32 state) +static u32 LoopedTask_RibbonsListReturnToMainMenu(s32 state) { switch (state) { case 0: PlaySE(SE_SELECT); PokenavFadeScreen(0); - sub_81C78A0(); + SlideMenuHeaderDown(); return LT_INC_AND_PAUSE; case 1: if (IsPaletteFadeActive()) return LT_PAUSE; if (MainMenuLoopedTaskIsBusy()) return LT_PAUSE; - sub_81C7FDC(); + SetLeftHeaderSpritesInvisibility(); break; } return LT_FINISH; } -static u32 sub_81D021C(s32 state) +static u32 LoopedTask_RibbonsListOpenSummary(s32 state) { switch (state) { @@ -631,23 +645,23 @@ static u32 sub_81D021C(s32 state) return LT_FINISH; } -static void sub_81D024C(struct PokenavSub10 * ptr) +static void AddRibbonsMonListWindow(struct PokenavSub10 *monMenu) { s32 r2; - ptr->winid = AddWindow(&gUnknown_086237D4); - PutWindowTilemap(ptr->winid); - r2 = sub_81CFB38(); - sub_81D02B0(ptr->winid, 0, r2); - CopyWindowToVram(ptr->winid, 1); - sub_81D0288(ptr); + monMenu->winid = AddWindow(&sRibbonsMonListWindowTemplate); + PutWindowTilemap(monMenu->winid); + r2 = GetRibbonsMonListCount(); + sub_81D02B0(monMenu->winid, 0, r2); + CopyWindowToVram(monMenu->winid, 1); + sub_81D0288(monMenu); } -static void sub_81D0288(struct PokenavSub10 * ptr) +static void sub_81D0288(struct PokenavSub10 *monMenu) { - s32 r4 = GetSelectedMatchCall(); - s32 r2 = sub_81CFB38(); - sub_81D02B0(ptr->winid, r4 + 1, r2); - CopyWindowToVram(ptr->winid, 2); + s32 r4 = GetSelectedPokenavListIndex(); + s32 r2 = GetRibbonsMonListCount(); + sub_81D02B0(monMenu->winid, r4 + 1, r2); + CopyWindowToVram(monMenu->winid, 2); } static void sub_81D02B0(s32 windowId, s32 val1, s32 val2) @@ -663,22 +677,22 @@ static void sub_81D02B0(s32 windowId, s32 val1, s32 val2) AddTextPrinterParameterized(windowId, 1, strbuf, x, 1, 0xFF, NULL); } -static void sub_81D0304(void) +static void InitMonRibbonPokenavListMenuTemplate(void) { struct PokenavListTemplate template; - template.list.monList = sub_81CFB28(); - template.unk4 = sub_81CFB38(); + template.list.monList = GetMonRibbonMonListData(); + template.count = GetRibbonsMonListCount(); template.unk8 = 4; - template.unk6 = sub_81CFB64(); - template.unk9 = 13; - template.unkA = 17; - template.unkB = 1; - template.unkC = 8; - template.unkD = 2; - template.unkE = 1; - template.listFunc.unk10_1 = BufferRibbonMonInfoText; + template.unk6 = GetRibbonListMenuCurrIndex(); + template.item_X = 13; + template.windowWidth = 17; + template.listTop = 1; + template.maxShowed = 8; + template.fillValue = 2; + template.fontId = 1; + template.listFunc.printMonFunc = BufferRibbonMonInfoText; template.unk14 = NULL; - sub_81C81D4(&gUnknown_086237B0[1], &template, 0); + sub_81C81D4(&sMonRibbonListBgTemplates[1], &template, 0); } // Buffers the "Nickname gender/level" text for the ribbon mon list diff --git a/src/pokenav_ribbons_2.c b/src/pokenav_ribbons_2.c index 6eabc9b335..203aa19e5e 100644 --- a/src/pokenav_ribbons_2.c +++ b/src/pokenav_ribbons_2.c @@ -13,28 +13,38 @@ #include "window.h" #include "constants/songs.h" +enum +{ + RIBBONS_SUMMARY_FUNC_NONE, + RIBBONS_SUMMARY_FUNC_MOVED_CURSOR, + RIBBONS_SUMMARY_FUNC_SELECT_RIBBON, + RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE, + RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL, + RIBBONS_SUMMARY_FUNC_EXIT, +}; + struct PokenavSub13 { u8 filler0[0x8]; - struct PokenavSub18 *field_8; + struct PokenavSub18 *monList; u16 field_C; u16 field_E; u16 field_10; u16 field_12; u32 field_14[25]; u32 field_78[8]; - u32 (*field_98)(struct PokenavSub13 *structPtr); + u32 (*callback)(struct PokenavSub13 *structPtr); }; struct PokenavSub14 { - u32 (*field_0)(void); + u32 (*callback)(void); u32 loopedTaskId; - u16 field_8; - u16 field_A; - u16 field_C; + u16 nameWindowId; + u16 ribbonCountWindowId; + u16 listIdxWindowId; u16 field_E; - u16 field_10; + u16 monSpriteId; struct Sprite *field_14; u32 filler; u8 tilemapBuffers[2][BG_SCREEN_SIZE]; @@ -43,48 +53,48 @@ struct PokenavSub14 static u32 gUnknown_030012C0; static u32 gUnknown_030012C4; -void sub_81D0E84(struct PokenavSub14 *structPtr); -void sub_81D0FF0(struct PokenavSub14 *structPtr); -void sub_81D10D0(struct PokenavSub14 *structPtr); +void PrintCurrentMonRibbonCount(struct PokenavSub14 *structPtr); +void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *structPtr); +void PrintRibbonsMonListIndex(struct PokenavSub14 *structPtr); void sub_81D1500(struct PokenavSub14 *structPtr); void sub_81D0EFC(struct PokenavSub14 *structPtr); -void sub_81D1148(struct PokenavSub14 *structPtr); -void sub_81D10A4(struct PokenavSub14 *structPtr); -void sub_81D1178(struct PokenavSub14 *structPtr); +void ResetSpritesAndDrawRibbonsMonFrontPic(struct PokenavSub14 *structPtr); +void AddRibbonListIndexWindow(struct PokenavSub14 *structPtr); +void DestroyRibbonsMonFrontPic(struct PokenavSub14 *structPtr); void sub_81D11D8(struct PokenavSub14 *structPtr); void sub_81D11FC(struct PokenavSub14 *structPtr); -void sub_81D0E60(struct PokenavSub14 *structPtr); +void AddRibbonCountWindow(struct PokenavSub14 *structPtr); void sub_81D1448(struct PokenavSub14 *structPtr); void sub_81D13FC(struct PokenavSub14 *structPtr); -void sub_81D0FCC(struct PokenavSub14 *structPtr); +void AddRibbonSummaryMonNameWindow(struct PokenavSub14 *structPtr); void sub_81D12D8(struct PokenavSub14 *structPtr); bool32 sub_81D1524(struct PokenavSub14 *structPtr); bool32 sub_81D1234(struct PokenavSub14 *structPtr); void sub_81D0814(struct PokenavSub13 *structPtr); -u32 sub_81D0548(struct PokenavSub13 *structPtr); -u32 sub_81D04C4(struct PokenavSub13 *structPtr); -u32 sub_81D05D4(struct PokenavSub13 *structPtr); +u32 HandleExpandedRibbonInput(struct PokenavSub13 *structPtr); +u32 RibbonsSummaryHandleInput(struct PokenavSub13 *structPtr); +u32 ReturnToRibbonsListFromSummary(struct PokenavSub13 *structPtr); bool32 sub_81D05DC(struct PokenavSub13 *structPtr); bool32 sub_81D0688(struct PokenavSub13 *structPtr); bool32 sub_81D0664(struct PokenavSub13 *structPtr); bool32 sub_81D061C(struct PokenavSub13 *structPtr); bool32 sub_81D0688(struct PokenavSub13 *structPtr); -bool32 sub_81D0A58(void); -u32 sub_81D06C4(void); -u32 sub_81D06D4(void); -u16 sub_81D1184(s32 unused0, s32 unused1); +bool32 GetCurrentLoopedTaskActive(void); +u32 GetRibbonsSummaryCurrentIndex(void); +u32 GetRibbonsSummaryMonListCount(void); +u16 DrawRibbonsMonFrontPic(s32 unused0, s32 unused1); void sub_81D1258(struct Sprite *sprite, s32 arg1, s32 arg2, s32 arg3); void sub_81D1284(struct Sprite *sprite); void sub_81D1350(void); void sub_81D13BC(u16 *dst, u32 id); void sub_81D1370(u32 arg0, u32 id); void sub_81D1538(struct Sprite *sprite); -u32 sub_81D0A6C(s32 state); -u32 sub_81D0C84(s32 state); -u32 sub_81D0D2C(s32 state); -u32 sub_81D0D8C(s32 state); -u32 sub_81D0E00(s32 state); -u32 sub_81D0C54(s32 state); +u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state); +u32 LoopedTask_UpdateRibbonsSummaryInfo(s32 state); +u32 LoopedTask_ExpandSelectedRibbon(s32 state); +u32 LoopedTask_MoveRibbonsCursorExpanded(s32 state); +u32 LoopedTask_ShrinkExpandedRibbon(s32 state); +u32 LoopedTask_ExitRibbonsSummaryMenu(s32 state); struct { @@ -147,95 +157,95 @@ static const struct BgTemplate gUnknown_08624B98[] = } }; -static const LoopedTask gUnknown_08624BA0[] = +static const LoopedTask sRibbonsSummaryMenuLoopTaskFuncs[] = { - NULL, - sub_81D0C84, - sub_81D0D2C, - sub_81D0D8C, - sub_81D0E00, - sub_81D0C54 + [RIBBONS_SUMMARY_FUNC_NONE] = NULL, + [RIBBONS_SUMMARY_FUNC_MOVED_CURSOR] = LoopedTask_UpdateRibbonsSummaryInfo, + [RIBBONS_SUMMARY_FUNC_SELECT_RIBBON] = LoopedTask_ExpandSelectedRibbon, + [RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE] = LoopedTask_MoveRibbonsCursorExpanded, + [RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL] = LoopedTask_ShrinkExpandedRibbon, + [RIBBONS_SUMMARY_FUNC_EXIT] = LoopedTask_ExitRibbonsSummaryMenu }; // code -bool32 PokenavCallback_Init_13(void) +bool32 PokenavCallback_Init_RibbonsSummaryMenu(void) { - struct PokenavSub13 *structPtr = AllocSubstruct(13, sizeof(struct PokenavSub13)); + struct PokenavSub13 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST, sizeof(struct PokenavSub13)); if (structPtr == NULL) return FALSE; - structPtr->field_8 = GetSubstructPtr(18); - if (structPtr->field_8 == NULL) + structPtr->monList = GetSubstructPtr(POKENAV_SUBSTRUCT_MON_LIST); + if (structPtr->monList == NULL) return FALSE; sub_81D0814(structPtr); - structPtr->field_98 = sub_81D04C4; + structPtr->callback = RibbonsSummaryHandleInput; gKeyRepeatContinueDelay = 3; gKeyRepeatStartDelay = 10; return TRUE; } -u32 sub_81D04A0(void) +u32 GetRibbonsSummaryMenuCallback(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - return structPtr->field_98(structPtr); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return structPtr->callback(structPtr); } -void sub_81D04B8(void) +void FreeRibbonsSummaryScreen1(void) { - FreePokenavSubstruct(13); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); } -u32 sub_81D04C4(struct PokenavSub13 *structPtr) +u32 RibbonsSummaryHandleInput(struct PokenavSub13 *structPtr) { - if (JOY_REPEAT(DPAD_UP) && structPtr->field_8->unk2 != 0) + if (JOY_REPEAT(DPAD_UP) && structPtr->monList->currIndex != 0) { - structPtr->field_8->unk2--; + structPtr->monList->currIndex--; structPtr->field_C = 0; sub_81D0814(structPtr); - return 1; + return RIBBONS_SUMMARY_FUNC_MOVED_CURSOR; } - if (JOY_REPEAT(DPAD_DOWN) && structPtr->field_8->unk2 < structPtr->field_8->unk0 - 1) + if (JOY_REPEAT(DPAD_DOWN) && structPtr->monList->currIndex < structPtr->monList->listCount - 1) { - structPtr->field_8->unk2++; + structPtr->monList->currIndex++; structPtr->field_C = 0; sub_81D0814(structPtr); - return 1; + return RIBBONS_SUMMARY_FUNC_MOVED_CURSOR; } if (JOY_NEW(A_BUTTON)) { - structPtr->field_98 = sub_81D0548; - return 2; + structPtr->callback = HandleExpandedRibbonInput; + return RIBBONS_SUMMARY_FUNC_SELECT_RIBBON; } if (JOY_NEW(B_BUTTON)) { - structPtr->field_98 = sub_81D05D4; - return 5; + structPtr->callback = ReturnToRibbonsListFromSummary; + return RIBBONS_SUMMARY_FUNC_EXIT; } - return 0; + return RIBBONS_SUMMARY_FUNC_NONE; } -u32 sub_81D0548(struct PokenavSub13 *structPtr) +u32 HandleExpandedRibbonInput(struct PokenavSub13 *structPtr) { if (JOY_REPEAT(DPAD_UP) && sub_81D05DC(structPtr)) - return 3; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_REPEAT(DPAD_DOWN) && sub_81D061C(structPtr)) - return 3; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_REPEAT(DPAD_LEFT) && sub_81D0664(structPtr)) - return 3; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_REPEAT(DPAD_RIGHT) && sub_81D0688(structPtr)) - return 3; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CURSOR_MOVE; if (JOY_NEW(B_BUTTON)) { - structPtr->field_98 = sub_81D04C4; - return 4; + structPtr->callback = RibbonsSummaryHandleInput; + return RIBBONS_SUMMARY_FUNC_EXPANDED_CANCEL; } - return 0; + return RIBBONS_SUMMARY_FUNC_NONE; } -u32 sub_81D05D4(struct PokenavSub13 *structPtr) +u32 ReturnToRibbonsListFromSummary(struct PokenavSub13 *structPtr) { - return POKENAV_MENU_E; + return POKENAV_RIBBONS_RETURN_TO_MON_LIST; } bool32 sub_81D05DC(struct PokenavSub13 *structPtr) @@ -320,23 +330,23 @@ bool32 sub_81D0688(struct PokenavSub13 *structPtr) return FALSE; } -u32 sub_81D06C4(void) +u32 GetRibbonsSummaryCurrentIndex(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - return structPtr->field_8->unk2; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return structPtr->monList->currIndex; } -u32 sub_81D06D4(void) +u32 GetRibbonsSummaryMonListCount(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - return structPtr->field_8->unk0; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + return structPtr->monList->listCount; } static void GetCurrMonInfo1(u8 *nick, u8 *level, u8 *gender) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - struct PokenavSub18 *mons = structPtr->field_8; - struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavSub18 *mons = structPtr->monList; + struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) { @@ -357,9 +367,9 @@ static void GetCurrMonInfo1(u8 *nick, u8 *level, u8 *gender) static void GetCurrMonInfo2(u16 *species, u32 *personality, u32 *otId) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - struct PokenavSub18 *mons = structPtr->field_8; - struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavSub18 *mons = structPtr->monList; + struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) { @@ -379,9 +389,9 @@ static void GetCurrMonInfo2(u16 *species, u32 *personality, u32 *otId) static u32 GetCurrMonRibbonCount(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); - struct PokenavSub18 *mons = structPtr->field_8; - struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); + struct PokenavSub18 *mons = structPtr->monList; + struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) return GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBON_COUNT); @@ -393,8 +403,8 @@ void sub_81D0814(struct PokenavSub13 *structPtr) { u32 ribbons; s32 i, j; - struct PokenavSub18 *mons = structPtr->field_8; - struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + struct PokenavSub18 *mons = structPtr->monList; + struct PokenavMonList *monInfo = &mons->monData[mons->currIndex]; if (monInfo->boxId == TOTAL_BOXES_COUNT) ribbons = GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBONS); @@ -433,27 +443,27 @@ void sub_81D0814(struct PokenavSub13 *structPtr) u32 *sub_81D0914(u32 *arg0) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); *arg0 = structPtr->field_10; return structPtr->field_14; } u32 *sub_81D092C(u32 *arg0) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); *arg0 = structPtr->field_12; return structPtr->field_78; } u16 sub_81D0944(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); return structPtr->field_C; } u32 sub_81D0954(void) { - struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub13 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_LIST); int var = structPtr->field_C; if (var <= 24) return structPtr->field_14[var]; @@ -461,38 +471,38 @@ u32 sub_81D0954(void) return structPtr->field_78[var - 27]; } -bool32 sub_81D0978(void) +bool32 OpenRibbonsSummaryMenu(void) { - struct PokenavSub14 *structPtr = AllocSubstruct(14, sizeof(struct PokenavSub14)); + struct PokenavSub14 *structPtr = AllocSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU, sizeof(struct PokenavSub14)); if (structPtr == NULL) return FALSE; - structPtr->loopedTaskId = CreateLoopedTask(sub_81D0A6C, 1); - structPtr->field_0 = sub_81D0A58; + structPtr->loopedTaskId = CreateLoopedTask(LoopedTask_OpenRibbonsSummaryMenu, 1); + structPtr->callback = GetCurrentLoopedTaskActive; return TRUE; } -void sub_81D09B0(s32 id) +void CreateRibbonsSummaryLoopedTask(s32 id) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); - structPtr->loopedTaskId = CreateLoopedTask(gUnknown_08624BA0[id], 1); - structPtr->field_0 = sub_81D0A58; + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + structPtr->loopedTaskId = CreateLoopedTask(sRibbonsSummaryMenuLoopTaskFuncs[id], 1); + structPtr->callback = GetCurrentLoopedTaskActive; } -u32 sub_81D09E0(void) +u32 IsRibbonsSummaryLoopedTaskActive(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); - return structPtr->field_0(); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + return structPtr->callback(); } -void sub_81D09F4(void) +void FreeRibbonsSummaryScreen2(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); - RemoveWindow(structPtr->field_A); - RemoveWindow(structPtr->field_8); - RemoveWindow(structPtr->field_C); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); + RemoveWindow(structPtr->ribbonCountWindowId); + RemoveWindow(structPtr->nameWindowId); + RemoveWindow(structPtr->listIdxWindowId); RemoveWindow(structPtr->field_E); - sub_81D1178(structPtr); + DestroyRibbonsMonFrontPic(structPtr); FreeSpriteTilesByTag(9); FreeSpritePaletteByTag(0xF); FreeSpritePaletteByTag(0x10); @@ -501,18 +511,18 @@ void sub_81D09F4(void) FreeSpritePaletteByTag(0x13); FreeSpriteOamMatrix(structPtr->field_14); DestroySprite(structPtr->field_14); - FreePokenavSubstruct(14); + FreePokenavSubstruct(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); } -bool32 sub_81D0A58(void) +bool32 GetCurrentLoopedTaskActive(void) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); return IsLoopedTaskActive(structPtr->loopedTaskId); } -u32 sub_81D0A6C(s32 state) +u32 LoopedTask_OpenRibbonsSummaryMenu(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -539,21 +549,21 @@ u32 sub_81D0A6C(s32 state) case 2: if (!FreeTempTileDataBuffersIfPossible()) { - sub_81D0E60(structPtr); + AddRibbonCountWindow(structPtr); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 3: if (!FreeTempTileDataBuffersIfPossible()) { - sub_81D0FCC(structPtr); + AddRibbonSummaryMonNameWindow(structPtr); return LT_INC_AND_PAUSE; } return LT_PAUSE; case 4: if (!FreeTempTileDataBuffersIfPossible()) { - sub_81D10A4(structPtr); + AddRibbonListIndexWindow(structPtr); return LT_INC_AND_PAUSE; } return LT_PAUSE; @@ -567,7 +577,7 @@ u32 sub_81D0A6C(s32 state) case 6: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81D1148(structPtr); + ResetSpritesAndDrawRibbonsMonFrontPic(structPtr); return LT_INC_AND_CONTINUE; } return LT_PAUSE; @@ -598,7 +608,7 @@ u32 sub_81D0A6C(s32 state) return LT_FINISH; } -u32 sub_81D0C54(s32 state) +u32 LoopedTask_ExitRibbonsSummaryMenu(s32 state) { switch (state) { @@ -614,9 +624,9 @@ u32 sub_81D0C54(s32 state) return LT_FINISH; } -u32 sub_81D0C84(s32 state) +u32 LoopedTask_UpdateRibbonsSummaryInfo(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -626,7 +636,7 @@ u32 sub_81D0C84(s32 state) case 1: if (!sub_81D1234(structPtr)) { - sub_81D0FF0(structPtr); + PrintRibbbonsSummaryMonInfo(structPtr); return LT_INC_AND_CONTINUE; } return LT_PAUSE; @@ -634,10 +644,10 @@ u32 sub_81D0C84(s32 state) sub_81D12D8(structPtr); return LT_INC_AND_CONTINUE; case 3: - sub_81D10D0(structPtr); + PrintRibbonsMonListIndex(structPtr); return LT_INC_AND_CONTINUE; case 4: - sub_81D0E84(structPtr); + PrintCurrentMonRibbonCount(structPtr); return LT_INC_AND_CONTINUE; case 5: if (!IsDma3ManagerBusyWithBgCopy()) @@ -654,9 +664,9 @@ u32 sub_81D0C84(s32 state) return LT_FINISH; } -u32 sub_81D0D2C(s32 state) +u32 LoopedTask_ExpandSelectedRibbon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -678,9 +688,9 @@ u32 sub_81D0D2C(s32 state) return LT_FINISH; } -u32 sub_81D0D8C(s32 state) +u32 LoopedTask_MoveRibbonsCursorExpanded(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -708,9 +718,9 @@ u32 sub_81D0D8C(s32 state) return LT_FINISH; } -u32 sub_81D0E00(s32 state) +u32 LoopedTask_ShrinkExpandedRibbon(s32 state) { - struct PokenavSub14 *structPtr = GetSubstructPtr(14); + struct PokenavSub14 *structPtr = GetSubstructPtr(POKENAV_SUBSTRUCT_RIBBONS_SUMMARY_MENU); switch (state) { case 0: @@ -720,7 +730,7 @@ u32 sub_81D0E00(s32 state) case 1: if (!sub_81D1524(structPtr)) { - sub_81D0E84(structPtr); + PrintCurrentMonRibbonCount(structPtr); PrintHelpBarText(HELPBAR_RIBBONS_LIST); return LT_INC_AND_PAUSE; } @@ -732,7 +742,7 @@ u32 sub_81D0E00(s32 state) return LT_FINISH; } -static const struct WindowTemplate gUnknown_08624BB8 = +static const struct WindowTemplate sRibbonCountWindowTemplate = { .bg = 2, .tilemapLeft = 12, @@ -743,14 +753,14 @@ static const struct WindowTemplate gUnknown_08624BB8 = .baseBlock = 0x14, }; -void sub_81D0E60(struct PokenavSub14 *structPtr) +void AddRibbonCountWindow(struct PokenavSub14 *structPtr) { - structPtr->field_A = AddWindow(&gUnknown_08624BB8); - PutWindowTilemap(structPtr->field_A); - sub_81D0E84(structPtr); + structPtr->ribbonCountWindowId = AddWindow(&sRibbonCountWindowTemplate); + PutWindowTilemap(structPtr->ribbonCountWindowId); + PrintCurrentMonRibbonCount(structPtr); } -void sub_81D0E84(struct PokenavSub14 *structPtr) +void PrintCurrentMonRibbonCount(struct PokenavSub14 *structPtr) { u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}; @@ -758,9 +768,9 @@ void sub_81D0E84(struct PokenavSub14 *structPtr) DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_RibbonsF700); - FillWindowPixelBuffer(structPtr->field_A, PIXEL_FILL(4)); - AddTextPrinterParameterized3(structPtr->field_A, 1, 0, 1, color, -1, gStringVar4); - CopyWindowToVram(structPtr->field_A, 2); + FillWindowPixelBuffer(structPtr->ribbonCountWindowId, PIXEL_FILL(4)); + AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, 1, color, -1, gStringVar4); + CopyWindowToVram(structPtr->ribbonCountWindowId, 2); } void sub_81D0EFC(struct PokenavSub14 *structPtr) @@ -769,11 +779,11 @@ void sub_81D0EFC(struct PokenavSub14 *structPtr) u32 ribbonId = sub_81D0954(); u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}; - FillWindowPixelBuffer(structPtr->field_A, PIXEL_FILL(4)); + FillWindowPixelBuffer(structPtr->ribbonCountWindowId, PIXEL_FILL(4)); if (ribbonId < 25) { for (i = 0; i < 2; i++) - AddTextPrinterParameterized3(structPtr->field_A, 1, 0, (i * 16) + 1, color, -1, gRibbonDescriptionPointers[ribbonId][i]); + AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, (i * 16) + 1, color, -1, gRibbonDescriptionPointers[ribbonId][i]); } else { @@ -783,13 +793,13 @@ void sub_81D0EFC(struct PokenavSub14 *structPtr) ribbonId--; for (i = 0; i < 2; i++) - AddTextPrinterParameterized3(structPtr->field_A, 1, 0, (i * 16) + 1, color, -1, gGiftRibbonDescriptionPointers[ribbonId][i]); + AddTextPrinterParameterized3(structPtr->ribbonCountWindowId, 1, 0, (i * 16) + 1, color, -1, gGiftRibbonDescriptionPointers[ribbonId][i]); } - CopyWindowToVram(structPtr->field_A, 2); + CopyWindowToVram(structPtr->ribbonCountWindowId, 2); } -static const struct WindowTemplate gUnknown_08624BC4 = +static const struct WindowTemplate sRibbonSummaryMonNameWindowTemplate = { .bg = 2, .tilemapLeft = 14, @@ -800,23 +810,23 @@ static const struct WindowTemplate gUnknown_08624BC4 = .baseBlock = 0x54, }; -void sub_81D0FCC(struct PokenavSub14 *structPtr) +void AddRibbonSummaryMonNameWindow(struct PokenavSub14 *structPtr) { - structPtr->field_8 = AddWindow(&gUnknown_08624BC4); - PutWindowTilemap(structPtr->field_8); - sub_81D0FF0(structPtr); + structPtr->nameWindowId = AddWindow(&sRibbonSummaryMonNameWindowTemplate); + PutWindowTilemap(structPtr->nameWindowId); + PrintRibbbonsSummaryMonInfo(structPtr); } static const u8 sMaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sFemaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); static const u8 sGenderlessIconString[] = _("{UNK_SPACER}"); -void sub_81D0FF0(struct PokenavSub14 *structPtr) +void PrintRibbbonsSummaryMonInfo(struct PokenavSub14 *structPtr) { const u8 *genderTxt; u8 *txtPtr; u8 level, gender; - u16 windowId = structPtr->field_8; + u16 windowId = structPtr->nameWindowId; FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); GetCurrMonInfo1(gStringVar3, &level, &gender); @@ -843,7 +853,7 @@ void sub_81D0FF0(struct PokenavSub14 *structPtr) CopyWindowToVram(windowId, 2); } -static const struct WindowTemplate gUnknown_08624BE8[] = +static const struct WindowTemplate sRibbonMonListIndexWindowTemplate[] = { { .bg = 2, @@ -857,46 +867,46 @@ static const struct WindowTemplate gUnknown_08624BE8[] = {}, }; -void sub_81D10A4(struct PokenavSub14 *structPtr) +void AddRibbonListIndexWindow(struct PokenavSub14 *structPtr) { - structPtr->field_C = AddWindow(gUnknown_08624BE8); - FillWindowPixelBuffer(structPtr->field_C, PIXEL_FILL(1)); - PutWindowTilemap(structPtr->field_C); - sub_81D10D0(structPtr); + structPtr->listIdxWindowId = AddWindow(sRibbonMonListIndexWindowTemplate); + FillWindowPixelBuffer(structPtr->listIdxWindowId, PIXEL_FILL(1)); + PutWindowTilemap(structPtr->listIdxWindowId); + PrintRibbonsMonListIndex(structPtr); } -void sub_81D10D0(struct PokenavSub14 *structPtr) +void PrintRibbonsMonListIndex(struct PokenavSub14 *structPtr) { s32 x; u8 *txtPtr; - u32 id = sub_81D06C4() + 1; - u32 count = sub_81D06D4(); + u32 id = GetRibbonsSummaryCurrentIndex() + 1; + u32 count = GetRibbonsSummaryMonListCount(); txtPtr = ConvertIntToDecimalStringN(gStringVar1, id, STR_CONV_MODE_RIGHT_ALIGN, 3); *(txtPtr++) = CHAR_SLASH; ConvertIntToDecimalStringN(txtPtr, count, STR_CONV_MODE_RIGHT_ALIGN, 3); x = GetStringCenterAlignXOffset(1, gStringVar1, 56); - AddTextPrinterParameterized(structPtr->field_C, 1, gStringVar1, x, 1, TEXT_SPEED_FF, NULL); - CopyWindowToVram(structPtr->field_C, 2); + AddTextPrinterParameterized(structPtr->listIdxWindowId, 1, gStringVar1, x, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(structPtr->listIdxWindowId, 2); } -void sub_81D1148(struct PokenavSub14 *structPtr) +void ResetSpritesAndDrawRibbonsMonFrontPic(struct PokenavSub14 *structPtr) { u16 species; u32 personality, otId; GetCurrMonInfo2(&species, &personality, &otId); ResetAllPicSprites(); - structPtr->field_10 = sub_81D1184(40, 104); - sub_81C7990(15, 0); + structPtr->monSpriteId = DrawRibbonsMonFrontPic(40, 104); + PokenavFillPalette(15, 0); } -void sub_81D1178(struct PokenavSub14 *structPtr) +void DestroyRibbonsMonFrontPic(struct PokenavSub14 *structPtr) { - FreeAndDestroyMonPicSprite(structPtr->field_10); + FreeAndDestroyMonPicSprite(structPtr->monSpriteId); } -u16 sub_81D1184(s32 unused0, s32 unused1) +u16 DrawRibbonsMonFrontPic(s32 unused0, s32 unused1) { u16 species, spriteId; u32 personality, otId; @@ -909,19 +919,19 @@ u16 sub_81D1184(s32 unused0, s32 unused1) void sub_81D11D8(struct PokenavSub14 *structPtr) { - sub_81D1258(&gSprites[structPtr->field_10], 40, -32, 6); + sub_81D1258(&gSprites[structPtr->monSpriteId], 40, -32, 6); } void sub_81D11FC(struct PokenavSub14 *structPtr) { - FreeAndDestroyMonPicSprite(structPtr->field_10); - structPtr->field_10 = sub_81D1184(-32, 104); - sub_81D1258(&gSprites[structPtr->field_10], -32, 40, 6); + FreeAndDestroyMonPicSprite(structPtr->monSpriteId); + structPtr->monSpriteId = DrawRibbonsMonFrontPic(-32, 104); + sub_81D1258(&gSprites[structPtr->monSpriteId], -32, 40, 6); } bool32 sub_81D1234(struct PokenavSub14 *structPtr) { - return (gSprites[structPtr->field_10].callback != SpriteCallbackDummy); + return (gSprites[structPtr->monSpriteId].callback != SpriteCallbackDummy); } void sub_81D1258(struct Sprite *sprite, s32 arg1, s32 arg2, s32 arg3) diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index 063e6f3248..bc6758cae7 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -14,7 +14,6 @@ #include "decompress.h" #include "sound.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/rgb.h" #include "random.h" diff --git a/src/record_mixing.c b/src/record_mixing.c index b12b716972..898459c0a5 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -5,7 +5,6 @@ #include "text.h" #include "item.h" #include "task.h" -#include "constants/species.h" #include "save.h" #include "load_save.h" #include "pokemon.h" @@ -713,18 +712,17 @@ static u8 sub_80E7A9C(struct DayCareMail *rmMail) return rmMail->message.itemId; } -static void ExchangeMail(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1) +static void sub_80E7AA4(struct RecordMixingDayCareMail *src, size_t recordSize, u8 (*idxs)[2], u8 which0, u8 which1) { struct DayCareMail buffer; struct RecordMixingDayCareMail *mail1; struct RecordMixingDayCareMail *mail2; mail1 = (void *)src + recordSize * idxs[which0][0]; - buffer = mail1->mail[idxs[which0][1]]; - + memcpy(&buffer, &mail1->mail[idxs[which0][1]], sizeof(struct DayCareMail)); mail2 = (void *)src + recordSize * idxs[which1][0]; - mail1->mail[idxs[which0][1]] = mail2->mail[idxs[which1][1]]; - mail2->mail[idxs[which1][1]] = buffer; + memcpy(&mail1->mail[idxs[which0][1]], &mail2->mail[idxs[which1][1]], sizeof(struct DayCareMail)); + memcpy(&mail2->mail[idxs[which1][1]], &buffer, sizeof(struct DayCareMail)); } static void sub_80E7B2C(const u8 *src) @@ -866,22 +864,22 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r } else if (sp1c[i][0] == TRUE && sp1c[i][1] == TRUE) { - u8 mail1, mail2; + u32 var1, var2; sp24[j][0] = i; - mail1 = sub_80E7A9C(&_src->mail[0]); - mail2 = sub_80E7A9C(&_src->mail[1]); - if (!(mail1 || mail2) || (mail1 && mail2)) //Logical (not bitwise) XOR. Should be ((mail1 || mail2) && !(mail1 && mail2)), but that doesn't match. + var1 = sub_80E7A9C(&_src->mail[0]); + var2 = sub_80E7A9C(&_src->mail[1]); + if (!(var1 || var2) || (var1 && var2)) { sp24[j][1] = Random2() % 2; } - else if (mail1 && !mail2) + else if (var1 && !var2) { sp24[j][1] = 0; } - else if (!mail1 && mail2) + else if (!var1 && var2) { - sp24[j][1] = 1; + sp24[j][1] = 1; } j++; } @@ -897,27 +895,27 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r switch (sp34) { case 2: - ExchangeMail(src, recordSize, sp24, 0, 1); + sub_80E7AA4(src, recordSize, sp24, 0, 1); break; case 3: which0 = gUnknown_0858CFB8[tableId][0]; which1 = gUnknown_0858CFB8[tableId][1]; - ExchangeMail(src, recordSize, sp24, which0, which1); + sub_80E7AA4(src, recordSize, sp24, which0, which1); break; case 4: ptr = sp24; which0 = gUnknown_0858CFBE[tableId][0]; which1 = gUnknown_0858CFBE[tableId][1]; - ExchangeMail(src, recordSize, ptr, which0, which1); + sub_80E7AA4(src, recordSize, ptr, which0, which1); which0 = gUnknown_0858CFBE[tableId][2]; which1 = gUnknown_0858CFBE[tableId][3]; - ExchangeMail(src, recordSize, ptr, which0, which1); + sub_80E7AA4(src, recordSize, ptr, which0, which1); break; } _src = (void *)src + which * recordSize; - gSaveBlock1Ptr->daycare.mons[0].mail = _src->mail[0]; - gSaveBlock1Ptr->daycare.mons[1].mail = _src->mail[1]; + memcpy(&gSaveBlock1Ptr->daycare.mons[0].mail, &_src->mail[0], sizeof(struct DayCareMail)); + memcpy(&gSaveBlock1Ptr->daycare.mons[1].mail, &_src->mail[1], sizeof(struct DayCareMail)); SeedRng(oldSeed); } diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 5a0579f709..881c2d3ec8 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -846,7 +846,7 @@ bool8 sub_8186450(void) return (sUnknown_0203CCD0 == 0); } -void sub_8186468(u8 *dst) +void GetRecordedBattleRecordMixFriendName(u8 *dst) { s32 i; diff --git a/src/region_map.c b/src/region_map.c index 49b21be078..c2a5b4e9c3 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -131,7 +131,11 @@ static const u16 sRegionMap_SpecialPlaceLocations[][2] = { {MAPSEC_UNDERWATER_105, MAPSEC_ROUTE_105}, {MAPSEC_UNDERWATER_124, MAPSEC_ROUTE_124}, + #ifdef BUGFIX + {MAPSEC_UNDERWATER_125, MAPSEC_ROUTE_125}, + #else {MAPSEC_UNDERWATER_125, MAPSEC_ROUTE_129}, // BUG: Map will incorrectly display the name of Route 129 when diving on Route 125 (for Marine Cave only) + #endif {MAPSEC_UNDERWATER_126, MAPSEC_ROUTE_126}, {MAPSEC_UNDERWATER_127, MAPSEC_ROUTE_127}, {MAPSEC_UNDERWATER_128, MAPSEC_ROUTE_128}, diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 46fc4cd41d..d8d75a0e03 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -11,7 +11,6 @@ #include "battle_controllers.h" #include "link.h" #include "sprite.h" -#include "constants/species.h" #include "constants/trainers.h" #include "battle_interface.h" #include "battle_anim.h" diff --git a/src/roamer.c b/src/roamer.c index 8a67234e36..d053e5b255 100644 --- a/src/roamer.c +++ b/src/roamer.c @@ -4,7 +4,6 @@ #include "random.h" #include "roamer.h" #include "constants/maps.h" -#include "constants/species.h" enum { diff --git a/src/roulette.c b/src/roulette.c index a0d1a7dc01..4173edcdbe 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -30,7 +30,6 @@ #include "constants/coins.h" #include "constants/rgb.h" #include "constants/roulette.h" -#include "constants/species.h" #include "constants/songs.h" #define BALLS_PER_ROUND 6 @@ -464,8 +463,9 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 0xC5 }, - // BUG: Array not terminated properly - //DUMMY_WIN_TEMPLATE + #ifdef UBFIX + DUMMY_WIN_TEMPLATE, + #endif }; static const struct GridSelection sGridSelections[NUM_GRID_SELECTIONS + 1] = diff --git a/src/safari_zone.c b/src/safari_zone.c index e8827e1246..3b86bc4640 100644 --- a/src/safari_zone.c +++ b/src/safari_zone.c @@ -107,7 +107,7 @@ void CB2_EndSafariBattle(void) { ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle); WarpIntoMap(); - gFieldCallback = sub_80AF6F0; + gFieldCallback = FieldCB_ReturnToFieldNoScriptCheckMusic; SetMainCallback2(CB2_LoadMap); } else if (gBattleOutcome == B_OUTCOME_CAUGHT) diff --git a/src/save.c b/src/save.c index 0a2a4e7994..680f33de0a 100644 --- a/src/save.c +++ b/src/save.c @@ -13,7 +13,7 @@ #include "link.h" #include "constants/game_stat.h" -static u16 CalculateChecksum(const void *data, u16 size); +static u16 CalculateChecksum(void *data, u16 size); static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section); static u8 GetSaveValidStatus(const struct SaveSectionLocation *location); static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location); @@ -621,7 +621,7 @@ static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section) return TRUE; } -static u16 CalculateChecksum(const void *data, u16 size) +static u16 CalculateChecksum(void *data, u16 size) { u16 i; u32 checksum = 0; @@ -648,7 +648,7 @@ static void UpdateSaveAddresses(void) gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; } - for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //i = SECTOR_ID_PKMN_STORAGE_START; in the initialization clause does not match + for (; i <= SECTOR_ID_PKMN_STORAGE_END; i++) //setting i to SECTOR_ID_PKMN_STORAGE_START does not match { gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd; gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size; diff --git a/src/scrcmd.c b/src/scrcmd.c index 578e357fa5..f36a441875 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -788,8 +788,8 @@ bool8 ScrCmd_warphole(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); - s16 x; - s16 y; + u16 x; + u16 y; PlayerGetDestCoords(&x, &y); if (mapGroup == 0xFF && mapNum == 0xFF) @@ -2235,7 +2235,9 @@ bool8 ScrCmd_gotoram(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_warpD1(struct ScriptContext *ctx) +// Unused +// For the warp used by the Aqua Hideout, see DoTeleportTileWarp +bool8 ScrCmd_warpspinenter(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -2244,8 +2246,8 @@ bool8 ScrCmd_warpD1(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); SetWarpDestination(mapGroup, mapNum, warpId, x, y); - sub_808D074(GetPlayerFacingDirection()); - sub_80B0244(); + SetSpinStartFacingDir(GetPlayerFacingDirection()); + DoSpinEnterWarp(); ResetInitialPlayerAvatarState(); return TRUE; } diff --git a/src/script.c b/src/script.c index 889c25765c..9ba1a74297 100644 --- a/src/script.c +++ b/src/script.c @@ -26,9 +26,9 @@ void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTable s32 i; ctx->mode = 0; - ctx->scriptPtr = NULL; + ctx->scriptPtr = 0; ctx->stackDepth = 0; - ctx->nativePtr = NULL; + ctx->nativePtr = 0; ctx->cmdTable = cmdTable; ctx->cmdTableEnd = cmdTableEnd; @@ -55,7 +55,7 @@ void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void)) void StopScript(struct ScriptContext *ctx) { ctx->mode = 0; - ctx->scriptPtr = NULL; + ctx->scriptPtr = 0; } bool8 RunScriptCommand(struct ScriptContext *ctx) diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index a7b5433f06..ad1a55230e 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -22,7 +22,6 @@ #include "string_util.h" #include "tv.h" #include "constants/items.h" -#include "constants/species.h" #include "constants/tv.h" #include "constants/battle_frontier.h" @@ -67,7 +66,7 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u u8 heldItem[2]; struct Pokemon mon; - CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&mon, species, level, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); heldItem[0] = item; heldItem[1] = item >> 8; SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem); @@ -140,7 +139,7 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item) u8 heldItem[2]; ZeroEnemyPartyMons(); - CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, 0, 0, OT_ID_PLAYER_ID, 0); if (item) { heldItem[0] = item; diff --git a/src/secret_base.c b/src/secret_base.c index 3f69e0419e..8e09295933 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -46,7 +46,6 @@ #include "constants/moves.h" #include "constants/secret_bases.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/tv.h" @@ -964,7 +963,7 @@ static void HandleRegistryMenuInput(u8 taskId) data = gTasks[taskId].data; input = ListMenu_ProcessInput(data[5]); - ListMenuGetScrollAndRow(data[5], (u16 *)&data[2], (u16 *)&data[1]); + ListMenuGetScrollAndRow(data[5], &data[2], &data[1]); switch (input) { case LIST_NOTHING_CHOSEN: @@ -1045,10 +1044,10 @@ void DeleteRegistry_Yes_Callback(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); + DestroyListMenuTask(data[5], &data[2], &data[1]); gSaveBlock1Ptr->secretBases[data[4]].registryStatus = 0; BuildRegistryMenuItems(taskId); - sub_812225C((u16 *)&data[2], (u16 *)&data[1], (u16)data[3], (u16)data[0]); + sub_812225C(&data[2], &data[1], data[3], data[0]); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } @@ -1062,7 +1061,7 @@ static void DeleteRegistry_No(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrame(0, 0); - DestroyListMenuTask((u8)data[5], (u16 *)&data[2], (u16 *)&data[1]); + DestroyListMenuTask(data[5], &data[2], &data[1]); FinalizeRegistryMenu(taskId); gTasks[taskId].func = HandleRegistryMenuInput; } diff --git a/src/shop.c b/src/shop.c index 6e2e82a521..44ab0885ce 100755 --- a/src/shop.c +++ b/src/shop.c @@ -984,7 +984,7 @@ static void Task_BuyHowManyDialogueInit(u8 taskId) u16 maxQuantity; DrawStdFrameWithCustomTileAndPalette(3, FALSE, 1, 13); - ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, MAX_ITEM_DIGITS + 1); StringExpandPlaceholders(gStringVar4, gText_InBagVar1); BuyMenuPrint(3, gStringVar4, 0, 1, 0, 0); tItemCount = 1; @@ -1026,7 +1026,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) ClearWindowTilemap(3); PutWindowTilemap(1); CopyItemName(tItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, BAG_ITEM_CAPACITY_DIGITS); ConvertIntToDecimalStringN(gStringVar3, gShopDataPtr->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6); BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, BuyMenuConfirmPurchase); } @@ -1148,7 +1148,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) FillWindowPixelBuffer(4, PIXEL_FILL(1)); PrintMoneyAmount(4, 38, 1, gShopDataPtr->totalCost, TEXT_SPEED_FF); - ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, BAG_ITEM_CAPACITY_DIGITS); StringExpandPlaceholders(gStringVar4, gText_xVar1); BuyMenuPrint(4, gStringVar4, 0, 1, 0, 0); } diff --git a/src/slot_machine.c b/src/slot_machine.c index cc001bcc90..7cfd7d22e1 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -252,8 +252,8 @@ struct SlotMachine /*0x0E*/ s16 payout; /*0x10*/ s16 netCoinLoss; // coins lost to machine (but never goes below 0) /*0x12*/ s16 bet; - /*0x14*/ s16 reelTimePixelOffset; - /*0x16*/ s16 reelTimePosition; + /*0x14*/ s16 reeltimePixelOffset; + /*0x16*/ s16 reeltimePosition; /*0x18*/ s16 currReel; /*0x1A*/ s16 reelIncrement; // speed of reel /*0x1C*/ s16 reelPixelOffsets[NUM_REELS]; @@ -584,7 +584,7 @@ static const u16 *const sDigitalDisplay_Pal; static const s16 sInitialReelPositions[NUM_REELS][2]; static const u8 sLuckyFlagProbabilities_Top3[][6]; static const u8 sLuckyFlagProbabilities_NotTop3[][6]; -static const u8 sReelTimeProbabilities_UnluckyGame[][17]; +static const u8 sReeltimeProbabilities_UnluckyGame[][17]; static const u8 sReelTimeProbabilities_LuckyGame[][17]; static const u8 sSymToMatch[]; static const u8 sReelTimeTags[]; @@ -682,7 +682,7 @@ static const struct WindowTemplate sWindowTemplate_InfoBox = .baseBlock = 1 }; -static const u8 sColors_ReelTimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; +static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; static bool8 (*const sSlotActions[])(struct Task *task) = { @@ -985,7 +985,7 @@ static void PlaySlotMachine_Internal(u8 slotMachineIndex, MainCallback exitCallb { struct Task *task = &gTasks[CreateTask(SlotMachineDummyTask, 0xFF)]; task->data[0] = slotMachineIndex; - StoreWordInTwoHalfwords((u16 *)&task->data[1], (intptr_t)exitCallback); + StoreWordInTwoHalfwords(&task->data[1], (intptr_t)exitCallback); } @@ -1744,13 +1744,13 @@ static u8 AttemptsAtLuckyFlags_NotTop3(void) static u8 GetReelTimeProbability(u8 reelTimeDraw) { - if (!sSlotMachine->luckyGame) - return sReelTimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower]; - - return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower]; + if (sSlotMachine->luckyGame == FALSE) + return sReeltimeProbabilities_UnluckyGame[reelTimeDraw][sSlotMachine->pikaPower]; + else + return sReelTimeProbabilities_LuckyGame[reelTimeDraw][sSlotMachine->pikaPower]; } -static void GetReelTimeDraw(void) +static void GetReeltimeDraw(void) { u8 rval; s16 reelTimeDraw; @@ -1773,13 +1773,15 @@ static bool8 ShouldReelTimeMachineExplode(u16 i) u16 rval = Random() & 0xff; if (rval < sReelTimeExplodeProbability[i]) return TRUE; - return FALSE; + else + return FALSE; } static u16 SlowReelSpeed(void) { u8 i = 0; - u8 rval, value; + u8 rval; + u8 value; if (sSlotMachine->netCoinLoss >= 300) i = 4; else if (sSlotMachine->netCoinLoss >= 250) @@ -1909,7 +1911,8 @@ static bool8 IsFinalTask_RunAwardPayoutActions(void) { if (FindTaskIdByFunc(RunAwardPayoutActions) == TAIL_SENTINEL) return TRUE; - return FALSE; + else + return FALSE; } static void RunAwardPayoutActions(u8 taskId) @@ -1997,7 +2000,7 @@ static u8 GetTag(u8 reel, s16 offset) static u8 GetNearbyReelTimeTag(s16 n) { - s16 newPosition = (sSlotMachine->reelTimePosition + n) % 6; + s16 newPosition = (sSlotMachine->reeltimePosition + n) % 6; if (newPosition < 0) newPosition += 6; return sReelTimeTags[newPosition]; @@ -2023,22 +2026,22 @@ s16 AdvanceSlotReelToNextTag(u8 reelIndex, s16 value) return offset; } -static void AdvanceReelTimeReel(s16 value) +static void AdvanceReeltimeReel(s16 value) { - sSlotMachine->reelTimePixelOffset += value; - sSlotMachine->reelTimePixelOffset %= 120; - sSlotMachine->reelTimePosition = 6 - sSlotMachine->reelTimePixelOffset / 20; + sSlotMachine->reeltimePixelOffset += value; + sSlotMachine->reeltimePixelOffset %= 120; + sSlotMachine->reeltimePosition = 6 - sSlotMachine->reeltimePixelOffset / 20; } -s16 AdvanceReelTimeReelToNextTag(s16 value) +s16 AdvanceReeltimeReelToNextTag(s16 value) { - s16 offset = sSlotMachine->reelTimePixelOffset % 20; + s16 offset = sSlotMachine->reeltimePixelOffset % 20; if (offset != 0) { if (offset < value) value = offset; - AdvanceReelTimeReel(value); - offset = sSlotMachine->reelTimePixelOffset % 20; + AdvanceReeltimeReel(value); + offset = sSlotMachine->reeltimePixelOffset % 20; } return offset; } @@ -3077,8 +3080,8 @@ static void Task_ReelTime(u8 taskId) static void ReelTime_Init(struct Task *task) { sSlotMachine->reelTimeSpinsLeft = 0; - sSlotMachine->reelTimePixelOffset = 0; - sSlotMachine->reelTimePosition = 0; + sSlotMachine->reeltimePixelOffset = 0; + sSlotMachine->reeltimePosition = 0; task->tState++; task->data[1] = 0; task->data[2] = 30; @@ -3093,7 +3096,7 @@ static void ReelTime_Init(struct Task *task) CreateReelTimeNumberSprites(); CreateReelTimeShadowSprites(); CreateReelTimeNumberGapSprite(); - GetReelTimeDraw(); + GetReeltimeDraw(); StopMapMusic(); PlayNewMapMusic(MUS_ROULETTE); } @@ -3116,12 +3119,12 @@ static void ReelTime_WindowEnter(struct Task *task) task->tState++; task->data[3] = 0; } - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); } static void ReelTime_WaitStartPikachu(struct Task *task) { - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); if (++task->data[5] >= 60) { task->tState++; @@ -3141,7 +3144,7 @@ static void ReelTime_PikachuSpeedUp1(struct Task *task) memcpy(reelTimeBoltDelays, sReelTimeBoltDelays, sizeof(sReelTimeBoltDelays)); memcpy(pikachuAuraFlashDelays, sPikachuAuraFlashDelays, sizeof(sPikachuAuraFlashDelays)); - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); // gradually slow down the reel task->data[4] -= 4; i = 4 - (task->data[4] >> 8); @@ -3159,7 +3162,7 @@ static void ReelTime_PikachuSpeedUp1(struct Task *task) static void ReelTime_PikachuSpeedUp2(struct Task *task) { - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); if (++task->data[5] >= 80) { task->tState++; @@ -3171,7 +3174,7 @@ static void ReelTime_PikachuSpeedUp2(struct Task *task) static void ReelTime_WaitReel(struct Task *task) { - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); task->data[4] = (u8)task->data[4] + 0x80; if (++task->data[5] >= 80) { @@ -3182,7 +3185,7 @@ static void ReelTime_WaitReel(struct Task *task) static void ReelTime_CheckExplode(struct Task *task) { - AdvanceReelTimeReel(task->data[4] >> 8); + AdvanceReeltimeReel(task->data[4] >> 8); task->data[4] = (u8)task->data[4] + 0x40; if (++task->data[5] >= 40) { @@ -3206,19 +3209,19 @@ static void ReelTime_CheckExplode(struct Task *task) static void ReelTime_LandOnOutcome(struct Task *task) { - s16 reelTimePixelOffset = sSlotMachine->reelTimePixelOffset % 20; - if (reelTimePixelOffset) + s16 reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20; + if (reeltimePixelOffset) { - reelTimePixelOffset = AdvanceReelTimeReelToNextTag(task->data[4] >> 8); + reeltimePixelOffset = AdvanceReeltimeReelToNextTag(task->data[4] >> 8); task->data[4] = (u8)task->data[4] + 0x40; } else if (GetNearbyReelTimeTag(1) != sSlotMachine->reelTimeDraw) { - AdvanceReelTimeReel(task->data[4] >> 8); - reelTimePixelOffset = sSlotMachine->reelTimePixelOffset % 20; + AdvanceReeltimeReel(task->data[4] >> 8); + reeltimePixelOffset = sSlotMachine->reeltimePixelOffset % 20; task->data[4] = (u8)task->data[4] + 0x40; } - if (reelTimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw) + if (reeltimePixelOffset == 0 && GetNearbyReelTimeTag(1) == sSlotMachine->reelTimeDraw) { task->data[4] = 0; // stop moving task->tState++; @@ -3441,7 +3444,7 @@ static void InfoBox_DrawWindow(struct Task *task) static void InfoBox_AddText(struct Task *task) { - AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReelTimeHelp, 0, gText_ReelTimeHelp); + AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp); CopyWindowToVram(1, 3); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0)); task->tState++; @@ -3771,7 +3774,7 @@ static void CreateReelTimeNumberSprites(void) static void SpriteCB_ReelTimeNumbers(struct Sprite *sprite) { - s16 r0 = (u16)(sSlotMachine->reelTimePixelOffset + sprite->data[7]); + s16 r0 = (u16)(sSlotMachine->reeltimePixelOffset + sprite->data[7]); r0 %= 40; sprite->pos1.y = r0 + 59; StartSpriteAnimIfDifferent(sprite, GetNearbyReelTimeTag(r0 / 20)); @@ -4827,7 +4830,7 @@ static const u8 sLuckyFlagProbabilities_NotTop3[][6] = { {40, 40, 35, 35, 40, 40} }; -static const u8 sReelTimeProbabilities_UnluckyGame[][17] = { +static const u8 sReeltimeProbabilities_UnluckyGame[][17] = { {243, 243, 243, 80, 80, 80, 80, 40, 40, 40, 40, 40, 40, 5, 5, 5, 5}, { 5, 5, 5, 150, 150, 150, 150, 130, 130, 130, 130, 130, 130, 100, 100, 100, 5}, { 4, 4, 4, 20, 20, 20, 20, 80, 80, 80, 80, 80, 80, 100, 100, 100, 40}, diff --git a/src/start_menu.c b/src/start_menu.c index fa51766e8e..bfced18588 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -138,7 +138,7 @@ static bool8 FieldCB_ReturnToFieldStartMenu(void); static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; -static const u8* const sPyramindFloorNames[] = +static const u8* const sPyramidFloorNames[] = { gText_Floor1, gText_Floor2, @@ -383,7 +383,7 @@ static void ShowPyramidFloorWindow(void) PutWindowTilemap(sBattlePyramidFloorWindowId); DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE); - StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->frontier.curChallengeBattleNum]); + StringCopy(gStringVar1, sPyramidFloorNames[gSaveBlock2Ptr->frontier.curChallengeBattleNum]); StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor); AddTextPrinterParameterized(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); CopyWindowToVram(sBattlePyramidFloorWindowId, 2); @@ -462,7 +462,7 @@ static bool32 InitStartMenuStep(void) sInitStartMenuData[0]++; break; case 4: - if (PrintStartMenuActions((s8 *)&sInitStartMenuData[1], 2)) + if (PrintStartMenuActions(&sInitStartMenuData[1], 2)) sInitStartMenuData[0]++; break; case 5: diff --git a/src/starter_choose.c b/src/starter_choose.c index 2585f34088..771db961e9 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -22,7 +22,6 @@ #include "trig.h" #include "window.h" #include "constants/songs.h" -#include "constants/species.h" #include "constants/rgb.h" #define STARTER_MON_COUNT 3 diff --git a/src/trade.c b/src/trade.c index 17aaba565a..96099cb744 100644 --- a/src/trade.c +++ b/src/trade.c @@ -49,7 +49,6 @@ #include "constants/moves.h" #include "constants/region_map_sections.h" #include "constants/rgb.h" -#include "constants/species.h" #include "constants/songs.h" #include "constants/union_room.h" @@ -380,7 +379,7 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < PARTY_SIZE; i++) { - CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); } PrintTradeMessage(TRADE_MSG_STANDBY); @@ -2725,9 +2724,9 @@ static void LoadTradeMonPic(u8 whichParty, u8 state) personality = GetMonData(mon, MON_DATA_PERSONALITY); if (whichParty == TRADE_PLAYER) - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[1], species, personality); else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[whichParty * 2 + 1], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); sTradeData->monSpecies[whichParty] = species; @@ -3660,7 +3659,7 @@ static bool8 AnimateTradeSequenceCable(void) case 65: if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); sTradeData->state++; } break; @@ -4175,7 +4174,7 @@ static bool8 AnimateTradeSequenceWireless(void) case 65: if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); sTradeData->state++; } break; @@ -4437,7 +4436,7 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) u8 isMail; struct Pokemon *pokemon = &gEnemyParty[0]; - CreateMon(pokemon, inGameTrade->species, level, 32, TRUE, inGameTrade->personality, OT_ID_PRESET, inGameTrade->otId); + CreateMon(pokemon, inGameTrade->species, level, USE_RANDOM_IVS, TRUE, inGameTrade->personality, OT_ID_PRESET, inGameTrade->otId); SetMonData(pokemon, MON_DATA_HP_IV, &inGameTrade->ivs[0]); SetMonData(pokemon, MON_DATA_ATK_IV, &inGameTrade->ivs[1]); diff --git a/src/trainer_hill.c b/src/trainer_hill.c index fcaeb060b7..18d56723cf 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -29,7 +29,6 @@ #include "constants/layouts.h" #include "constants/moves.h" #include "constants/maps.h" -#include "constants/species.h" #include "constants/trainers.h" #include "constants/easy_chat.h" #include "constants/trainer_hill.h" @@ -356,7 +355,7 @@ static void SetUpDataStruct(void) { if (sHillData == NULL) { - sHillData = AllocZeroed(sizeof(struct TrHillStruct2)); + sHillData = AllocZeroed(sizeof(*sHillData)); sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F; CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor)); nullsub_2(); diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index d2cb634f0b..c23047b01d 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -2,7 +2,6 @@ #include "sprite.h" #include "window.h" #include "malloc.h" -#include "constants/species.h" #include "palette.h" #include "decompress.h" #include "trainer_pokemon_sprites.h" diff --git a/src/trainer_see.c b/src/trainer_see.c index c37f372627..46fafa7e30 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -377,15 +377,15 @@ static u8 CheckPathBetweenTrainerAndPlayer(struct ObjectEvent *trainerObj, u8 ap } // preserve mapobj_unk_19 before clearing. - unk19_temp = trainerObj->range.as_nybbles.x; - unk19b_temp = trainerObj->range.as_nybbles.y; - trainerObj->range.as_nybbles.x = 0; - trainerObj->range.as_nybbles.y = 0; + unk19_temp = trainerObj->rangeX; + unk19b_temp = trainerObj->rangeY; + trainerObj->rangeX = 0; + trainerObj->rangeY = 0; collision = GetCollisionAtCoords(trainerObj, x, y, direction); - trainerObj->range.as_nybbles.x = unk19_temp; - trainerObj->range.as_nybbles.y = unk19b_temp; + trainerObj->rangeX = unk19_temp; + trainerObj->rangeY = unk19b_temp; if (collision == 4) return approachDistance; @@ -603,7 +603,7 @@ static void sub_80B44C8(u8 taskId) struct ObjectEvent *objEvent; // another objEvent loaded into by loadword? - LoadWordFromTwoHalfwords((u16*)&task->data[1], (u32 *)&objEvent); + LoadWordFromTwoHalfwords(&task->data[1], (u32 *)&objEvent); if (!task->data[7]) { ObjectEventClearHeldMovement(objEvent); @@ -624,7 +624,7 @@ static void sub_80B44C8(u8 taskId) void sub_80B4578(struct ObjectEvent *var) { - StoreWordInTwoHalfwords((u16 *)&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); + StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80B44C8, 0)].data[1], (u32)var); } void EndTrainerApproach(void) diff --git a/src/tv.c b/src/tv.c index 7732bb9b1a..748915c7a4 100644 --- a/src/tv.c +++ b/src/tv.c @@ -32,6 +32,7 @@ #include "decoration.h" #include "secret_base.h" #include "tv.h" +#include "pokeball.h" #include "data.h" #include "constants/battle_frontier.h" #include "constants/contest.h" @@ -42,7 +43,6 @@ #include "constants/moves.h" #include "constants/region_map_sections.h" #include "constants/script_menu.h" -#include "constants/species.h" #include "constants/tv.h" // Static type declarations @@ -964,7 +964,7 @@ void GabbyAndTyBeforeInterview(void) } if (!gBattleResults.usedMasterBall) { - for (i = 0; i < 11; i ++) + for (i = 0; i < POKEBALL_COUNT - 1; i ++) { if (gBattleResults.catchAttempts[i]) { @@ -1136,7 +1136,7 @@ void PutPokemonTodayCaughtOnAir(void) sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows); if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_POKEMON_TODAY_CAUGHT, FALSE) != TRUE) { - for (i = 0; i < 11; i ++) + for (i = 0; i < POKEBALL_COUNT - 1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -1153,7 +1153,7 @@ void PutPokemonTodayCaughtOnAir(void) } else { - for (i = 0; i < 11; i ++) + for (i = 0; i < POKEBALL_COUNT - 1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -1204,7 +1204,7 @@ void PutPokemonTodayFailedOnTheAir(void) if (!rbernoulli(1, 1)) { - for (i = 0, ct = 0; i < 11; i ++) + for (i = 0, ct = 0; i < POKEBALL_COUNT - 1; i ++) { ct += gBattleResults.catchAttempts[i]; } @@ -2229,7 +2229,7 @@ void sub_80EE184(void) show->breakingNews.kind = TVSHOW_BREAKING_NEWS; show->breakingNews.active = FALSE; balls = 0; - for (i = 0; i < 11; i ++) + for (i = 0; i < POKEBALL_COUNT - 1; i ++) { balls += gBattleResults.catchAttempts[i]; } diff --git a/src/union_room.c b/src/union_room.c index 05bd8cfb05..479792a7c6 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -52,7 +52,6 @@ #include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" -#include "constants/species.h" // States for Task_RunUnionRoom enum { @@ -479,7 +478,11 @@ static void Task_TryBecomeLinkLeader(u8 taskId) // BUG: sPlayerActivityGroupSize was meant below, not gPlayerCurrActivity // This will be false for all but ACTIVITY_BATTLE_DOUBLE and ACTIVITY_DECLINE // All this changes is which of two texts gets printed + #ifdef BUGFIX + id = (GROUP_MAX(sPlayerActivityGroupSize) == 2) ? 0 : 1; + #else id = (GROUP_MAX(gPlayerCurrActivity) == 2) ? 1 : 0; + #endif if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id])) { data->playerCount = sub_8013398(data->field_0); @@ -1321,7 +1324,11 @@ static bool32 IsPartnerActivityAcceptable(u32 activity, u32 linkGroup) if (linkGroup == 0xFF) return TRUE; - if (linkGroup <= ARRAY_COUNT(sAcceptedActivityIds)) // UB: <= may access data outside the array + #ifdef UBFIX + if (linkGroup < ARRAY_COUNT(sAcceptedActivityIds)) + #else + if (linkGroup <= ARRAY_COUNT(sAcceptedActivityIds)) + #endif { const u8 *bytes = sAcceptedActivityIds[linkGroup]; @@ -3754,7 +3761,7 @@ static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str printerTemplate.y = y; printerTemplate.currentX = x; printerTemplate.currentY = y; - printerTemplate.style = 0; + printerTemplate.unk = 0; gTextFlags.useAlternateDownArrow = FALSE; switch (colorIdx) @@ -4077,14 +4084,14 @@ static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname UR_AddTextPrinterParameterized(windowId, 1, uname, 8, y, colorIdx); if (species == SPECIES_EGG) { - UR_AddTextPrinterParameterized(windowId, 1, sText_EggTrade, 0x44, y, colorIdx); + UR_AddTextPrinterParameterized(windowId, 1, sText_EggTrade, 68, y, colorIdx); } else { - blit_move_info_icon(windowId, type + 1, 0x44, y); - UR_AddTextPrinterParameterized(windowId, 1, gSpeciesNames[species], 0x76, y, colorIdx); + BlitMenuInfoIcon(windowId, type + 1, 68, y); + UR_AddTextPrinterParameterized(windowId, 1, gSpeciesNames[species], 118, y, colorIdx); ConvertIntToDecimalStringN(levelStr, level, STR_CONV_MODE_RIGHT_ALIGN, 3); - UR_AddTextPrinterParameterized(windowId, 1, levelStr, 0xC6, y, colorIdx); + UR_AddTextPrinterParameterized(windowId, 1, levelStr, 198, y, colorIdx); } } diff --git a/src/union_room_chat.c b/src/union_room_chat.c index ed39d3acff..75464529f8 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -2121,7 +2121,7 @@ static void Task_ReceiveChatMessage(u8 taskId) static bool8 TryAllocDisplay(void) { - sDisplay = Alloc(sizeof(struct UnionRoomChatDisplay)); + sDisplay = Alloc(sizeof(*sDisplay)); if (sDisplay && TryAllocSprites()) { ResetBgsAndClearDma3BusyFlags(0); diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index ebb237d544..b4ccbfe064 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -1,5 +1,6 @@ #include "global.h" #include "main.h" +#include "dma3.h" #include "pokeblock.h" #include "malloc.h" #include "decompress.h" @@ -486,7 +487,7 @@ static void LoadUsePokeblockMenu(void) { case 0: sMenu->curMonSpriteId = 0xFF; - sub_81D1ED4(&sMenu->graph); + InitConditionGraphData(&sMenu->graph); sInfo->mainState++; break; case 1: @@ -536,12 +537,12 @@ static void LoadUsePokeblockMenu(void) sInfo->mainState++; break; case 11: - sub_81D2754(sMenu->graph.unk0[0], sMenu->graph.unk14[0]); - sub_81D20AC(&sMenu->graph); + sub_81D2754(sMenu->graph.stat[0], sMenu->graph.unk14[0]); + InitConditionGraphState(&sMenu->graph); sInfo->mainState++; break; case 12: - if (!sub_81D20BC(&sMenu->graph)) + if (!SetupConditionGraphScanlineParams(&sMenu->graph)) { sub_81D1F84(&sMenu->graph, sMenu->graph.unk14[0], sMenu->graph.unk14[0]); sInfo->mainState++; @@ -1240,8 +1241,7 @@ static void UpdateMonPic(u8 loadId) } else { - do {} while(0); // Only needed to match, feel free to remove. - DmaCopy16Defvars(3, sMenu->partySheets[loadId], sMenu->curMonTileStart, 0x800); + Dma3CopyLarge16_(sMenu->partySheets[loadId], sMenu->curMonTileStart, 0x800); LoadPalette(sMenu->partyPalettes[loadId], sMenu->curMonPalette, 32); } } @@ -1368,7 +1368,7 @@ static bool8 LoadUsePokeblockMenuGfx(void) LoadBgTilemap(2, sMenu->tilemapBuffer, 1280, 0); LoadPalette(gConditionGraphData_Pal, 48, 32); LoadPalette(gConditionText_Pal, 240, 32); - sub_81D21DC(2); + SetConditionGraphIOWindows(2); break; default: sMenu->info.helperState = 0; diff --git a/src/walda_phrase.c b/src/walda_phrase.c index 2b11add769..18fb2791b2 100644 --- a/src/walda_phrase.c +++ b/src/walda_phrase.c @@ -118,8 +118,8 @@ static u8 GetLetterTableId(u8 letter) static bool32 TryCalculateWallpaper(u16* backgroundClr, u16 *foregroundClr, u8 *iconId, u8 *patternId, u16 trainerId, u8 *phrase) { s32 i; - u8 array[9]; - u8 charsByTableId[15]; + ALIGNED(2) u8 array[12]; + u8 charsByTableId[16]; u16 *ptr; if (StringLength(phrase) != 15) @@ -173,14 +173,12 @@ static void sub_81D9C90(u8 *array, s32 arg1, s32 arg2) { var1 = (array[0] & 0x80) >> 7; - var1++; var1--; // needed to match - for (j = arg1 - 1; j >= 0; j--) { - var2 = array[j] & 0x80; + var2 = (array[j] & 0x80) >> 7; array[j] <<= 1; array[j] |= var1; - var1 = var2 >> 7; + var1 = var2; } } } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 492a10101e..9f81a3b3ed 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -21,7 +21,6 @@ #include "constants/items.h" #include "constants/layouts.h" #include "constants/maps.h" -#include "constants/species.h" #include "constants/weather.h" extern const u8 EventScript_RepelWoreOff[]; diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index 81fa16720a..87b200f14a 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -237,7 +237,7 @@ static void PrintHeaderTexts(void) FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0)); WCSS_AddTextPrinterParameterized(0, 1, sHeaderTexts[0], GetStringCenterAlignXOffset(1, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); - for (i = 0; i < (int)ARRAY_COUNT(sHeaderTexts[0]) - 1; i++) + for (i = 0; i < (int)ARRAY_COUNT(*sHeaderTexts) - 1; i++) { WCSS_AddTextPrinterParameterized(1, 1, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); } @@ -362,12 +362,12 @@ static u32 CountPlayersInGroupAndGetActivity(struct UnkStruct_x20 * unk20, u32 * { if (group_players(i) == 0) { - k = 0; //Should just be 1 without the increment after the loop ends but that doesn't match. + k = 0; for (j = 0; j < RFU_CHILD_MAX; j++) { if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++; } - k++; //See above comment. + k++; groupCounts[group_type(i)] += k; } else diff --git a/tools/gbafix/gbafix.c b/tools/gbafix/gbafix.c index 598e43aa08..d62a9c661a 100644 --- a/tools/gbafix/gbafix.c +++ b/tools/gbafix/gbafix.c @@ -28,14 +28,14 @@ // gbafix.c //--------------------------------------------------------------------------------- /* - Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Diegoisawesome) + Gameboy Advance ROM fixer (by Dark Fader / BlackThunder / WinterMute / Sierraffinity) Validates header of GBA roms. History ------- v1.07 - added support for ELF input, (PikalaxALT) - v1.06 - added output silencing, (Diegoisawesome) - v1.05 - added debug offset argument, (Diegoisawesome) + v1.06 - added output silencing, (Sierraffinity) + v1.05 - added debug offset argument, (Sierraffinity) v1.04 - converted to plain C, (WinterMute) v1.03 - header.fixed, header.device_type v1.02 - redefined the options (rgbfix style), checksum=0 @@ -146,7 +146,7 @@ int main(int argc, char *argv[]) // show syntax if (argc <= 1) { - printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n"); + printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Sierraffinity \n"); printf("Syntax: gbafix [-p] [-t[title]] [-c] [-m] [-r] [-d] [--silent]\n"); printf("\n"); printf("parameters:\n"); diff --git a/tools/scaninc/scaninc.cpp b/tools/scaninc/scaninc.cpp index a3e40c5d98..dcb16c0e79 100644 --- a/tools/scaninc/scaninc.cpp +++ b/tools/scaninc/scaninc.cpp @@ -108,7 +108,7 @@ int main(int argc, char **argv) break; } } - if (!exists && file.FileType() == SourceFileType::Asm) + if (!exists && (file.FileType() == SourceFileType::Asm || file.FileType() == SourceFileType::Inc)) { path = include; }