From 544b76fbbf66cd2019d4b068e40de4a693e95e79 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 21 Oct 2024 08:58:49 -0400 Subject: [PATCH 1/7] Added value for bard sound length --- include/bard_music.h | 6 ++++-- src/bard_music.c | 2 +- src/data/bard_music/moves.h | 2 +- src/data/bard_music/pokemon.h | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/bard_music.h b/include/bard_music.h index 2942fa8e47..b1d051b8d7 100644 --- a/include/bard_music.h +++ b/include/bard_music.h @@ -1,6 +1,8 @@ #ifndef GUARD_BARD_MUSIC_H #define GUARD_BARD_MUSIC_H +#define BARD_SOUND_MAX_LENGTH 6 + struct BardSound { /*0x00*/ u8 songLengthId; @@ -26,8 +28,8 @@ struct BardSong /*0x06*/ u16 volume; /*0x08*/ s16 pitch; /*0x0A*/ s16 voiceInflection; - /*0x0C*/ u16 lyrics[6]; - /*0x18*/ struct BardPhoneme phonemes[6]; + /*0x0C*/ u16 lyrics[BARD_SOUND_MAX_LENGTH]; + /*0x18*/ struct BardPhoneme phonemes[BARD_SOUND_MAX_LENGTH]; /*0x30*/ const struct BardSound *sound; }; diff --git a/src/bard_music.c b/src/bard_music.c index 165b4fe770..369a2767d1 100644 --- a/src/bard_music.c +++ b/src/bard_music.c @@ -48,7 +48,7 @@ void GetWordPhonemes(struct BardSong *song, u16 word) const struct BardSound *sound; song->length = 0; - for (i = 0; i < 6; i ++) + for (i = 0; i < BARD_SOUND_MAX_LENGTH; i ++) { sound = &song->sound[i]; if (sound->songLengthId != 0xFF) diff --git a/src/data/bard_music/moves.h b/src/data/bard_music/moves.h index 6c658cd4a0..31c3395fcd 100644 --- a/src/data/bard_music/moves.h +++ b/src/data/bard_music/moves.h @@ -5,7 +5,7 @@ const u16 gNumBardWords_Moves = MOVES_COUNT; -const struct BardSound gBardSounds_Moves[MOVES_COUNT][6] = { +const struct BardSound gBardSounds_Moves[MOVES_COUNT][BARD_SOUND_MAX_LENGTH] = { [MOVE_NONE] = { NULL_BARD_SOUND, NULL_BARD_SOUND, diff --git a/src/data/bard_music/pokemon.h b/src/data/bard_music/pokemon.h index 57ab426590..b3a67a24ed 100644 --- a/src/data/bard_music/pokemon.h +++ b/src/data/bard_music/pokemon.h @@ -3,7 +3,7 @@ const u16 gNumBardWords_Species = NUM_SPECIES; -const struct BardSound gBardSounds_Pokemon[NUM_SPECIES][6] = { +const struct BardSound gBardSounds_Pokemon[NUM_SPECIES][BARD_SOUND_MAX_LENGTH] = { [SPECIES_NONE] = { NULL_BARD_SOUND, NULL_BARD_SOUND, From da791cde9407641d3eb86700ffb8bd274a9a2d3a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 24 Oct 2024 12:41:38 -0400 Subject: [PATCH 2/7] Add TRY_DRAW_SPOT_PIXEL --- src/pokemon.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index 077b856793..d59f46ada1 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5684,7 +5684,7 @@ u16 SpeciesToCryId(u16 species) // To draw a spot pixel, add 4 to the color index #define SPOT_COLOR_ADJUSTMENT 4 /* - The macro below handles drawing the randomly-placed spots on Spinda's front sprite. + The macros below handle drawing the randomly-placed spots on Spinda's front sprite. Spinda has 4 spots, each with an entry in gSpindaSpotGraphics. Each entry contains a base x and y coordinate for the spot and a 16x16 binary image. Each bit in the image determines whether that pixel should be considered part of the spot. @@ -5696,18 +5696,26 @@ u16 SpeciesToCryId(u16 species) coordinate is calculated as (baseCoord + (given 4 bits of personality) - 8). In effect this means each spot can start at any position -8 to +7 off of its base coordinates (256 possibilities). - The macro then loops over the 16x16 spot image. For each bit in the spot's binary image, if + DRAW_SPINDA_SPOTS loops over the 16x16 spot image. For each bit in the spot's binary image, if the bit is set then it's part of the spot; try to draw it. A pixel is drawn on Spinda if the - pixel on Spinda satisfies the following formula: ((u8)(colorIndex - 1) <= 2). The -1 excludes - transparent pixels, as these are index 0. Therefore only colors 1, 2, or 3 on Spinda will - allow a spot to be drawn. These color indexes are Spinda's light brown body colors. To create + pixel is between FIRST_SPOT_COLOR and LAST_SPOT_COLOR (so only colors 1, 2, or 3 on Spinda will + allow a spot to be drawn). These color indexes are Spinda's light brown body colors. To create the spot it adds 4 to the color index, so Spinda's spots will be colors 5, 6, and 7. - The above is done two different ways in the macro: one with << 4, and one without. This - is because Spinda's sprite is a 4 bits per pixel image, but the pointer to Spinda's pixels + The above is done in TRY_DRAW_SPOT_PIXEL two different ways: one with << 4, and one without. + This is because Spinda's sprite is a 4 bits per pixel image, but the pointer to Spinda's pixels (destPixels) is an 8 bit pointer, so it addresses two pixels. Shifting by 4 accesses the 2nd of these pixels, so this is done every other time. */ + +// Draw spot pixel if this is Spinda's body color +#define TRY_DRAW_SPOT_PIXEL(pixels, shift) \ + if (((*(pixels) & (0xF << (shift))) >= (FIRST_SPOT_COLOR << (shift))) \ + && ((*(pixels) & (0xF << (shift))) <= (LAST_SPOT_COLOR << (shift)))) \ + { \ + *(pixels) += (SPOT_COLOR_ADJUSTMENT << (shift)); \ + } + #define DRAW_SPINDA_SPOTS(personality, dest) \ { \ s32 i; \ @@ -5737,17 +5745,11 @@ u16 SpeciesToCryId(u16 species) /* of the two pixels is being considered for drawing */ \ if (column & 1) \ { \ - /* Draw spot pixel if this is Spinda's body color */ \ - if ((u8)((*destPixels & 0xF0) - (FIRST_SPOT_COLOR << 4))\ - <= ((LAST_SPOT_COLOR - FIRST_SPOT_COLOR) << 4))\ - *destPixels += (SPOT_COLOR_ADJUSTMENT << 4); \ + TRY_DRAW_SPOT_PIXEL(destPixels, 4); \ } \ else \ { \ - /* Draw spot pixel if this is Spinda's body color */ \ - if ((u8)((*destPixels & 0xF) - FIRST_SPOT_COLOR) \ - <= (LAST_SPOT_COLOR - FIRST_SPOT_COLOR)) \ - *destPixels += SPOT_COLOR_ADJUSTMENT; \ + TRY_DRAW_SPOT_PIXEL(destPixels, 0); \ } \ } \ \ From f04c2faeb0758281a334a2235f86980a412a8801 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sun, 3 Nov 2024 17:53:53 -0500 Subject: [PATCH 3/7] Silence 'Nothing to be done for generated' messages (#2059) --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 6d66c34d65..a5f0224331 100644 --- a/Makefile +++ b/Makefile @@ -266,6 +266,8 @@ include audio_rules.mk # NOTE: Tools must have been built prior (FIXME) # so you can't really call this rule directly generated: $(AUTO_GEN_TARGETS) + @: # Silence the "Nothing to be done for `generated'" message, which some people were confusing for an error. + %.s: ; %.png: ; From 1b8e6fbe3f57c21069b39cbd643c3c1d73d07477 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 4 Nov 2024 15:39:31 -0500 Subject: [PATCH 4/7] Lay out emerald version png horizontally --- graphics/title_screen/emerald_version.png | Bin 1138 -> 1100 bytes graphics_file_rules.mk | 7 ++++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/graphics/title_screen/emerald_version.png b/graphics/title_screen/emerald_version.png index 2e8b32da988fe9471126f94bd0fed4bf8a0dedc0..9ee2992607efdb2b1c44ce09e01457575e9aa309 100644 GIT binary patch delta 1053 zcmV+&1mgSh2+Rl}iBL{Q4GJ0x0000DNk~Le0001h0000W2m=5B0PXyM7m*=9f7eMw zK~z|U?N`~3<2VeAPU<54|9?BYtT-6JNv3BX78s$?wp$iiEEY-kpfk! z|1-ZJ*VqwfXl+2Il+sFTjZho`@5WL#oWJNdVi-$;?#H<(mwkT(b(*t2Bz>S)ZvMj?~IC!){fq0GgJc?T4--&Ec)r^aqEROEk>m=DiE;nT@@5&)dInnHgMK~Z9> zF9s`^EeXeIU#TXr`vItb5snpZHMazZ(P!DP#TmIp!0ubxDSm*b6rmoTe*;&8!MbVy z89-2vVqh}*vh|o@?f2R(0?K%rA6!g%IHO`~nbQ-C#P$^A>Ow$OEiC1OtX_smpzb&C z5pV`9>xDfzfW?QIiP|j(W^2Y+@&y3P1hOi18r{t0v<(5EFD5h|;$1lu%QlvoCdVWv zg3*vPzUBZT*JpGQ4$pw?f7Dw2x!F}}3O)2@*Bbz|<)W%m02b#^I-Yuz7oxGHev3tX zu3?8cTv;c^V(0Dv!0vRMV|CWd(zGyo-gb5=)M9%l@mYsc>xYL0^tf?QoD(Cw9f;hG(~RJ*ajY8ET$5icq%M9c^)v9*iw%Vym9?g` zNJ{{<>~tPKHXZLj3do(4fazKWpo&~VJ6b=OLETtWszm_=f2(ylGJO#B!{_lgOX}%_ zX*JP7?f5sr*{UR)tU;|*2|f<{PLP+U&9sP8{_rJ$7cklbQq&$SMpr=Xf07OcFcCx= zLlYtlOi+mk8zUVfNEMeK0AK{-VCf`LZXiLkTx8Ws)ZQZ2;Hh8 z+VuKbgTEsHt7$f0K5fR_v?l4nca8TW1jMEOtYi4#^PX8zVoL0P>Y|5@mcYevlcL09(qhh*XqE~5# z*=18%0Hd{H7Jvi3v;{C(*mq=re`4m@O`+n?I`t=&W^pV@_8h^fTn=#AX=V>d zkoCT0lwX2rFR)xZvMN3?r_+3}XejJ^4A21Zdfg~9q3Hwg&Y?mV7Ki2)&{0D$57g^O zI}Kov1X+@*`k(;a`xxE;oFto8RBthM=oAgs>eLLFNqkTMPxWd2DcA@1Sz=? z6EC;`OkeO$1Jcx!NpNWt47FpW5YCw?(7b|N=CVMl7Fy!KB#nhn!_mH(!`-q<&SB-I zna+^kBuVX@F?vokeXx{*e>r!=cpZgTrMN6QRXS&C1g;Esh7Z(6R_t`|TjpQYrg};)+%0WuAUW!MJdMN5T&L%t=tV$ZP zM0Bv(sP)j0LbM=mv94cSU>dI zixLbsxoSd;adJ^bZh~A}c>{3BkpixGA8(6!2SB7isa}#Z|B}VNcyWjS_pLwmm)PIO zE!jWOZ)ctn=EK?Je*?hCP^74HBxpV;@&l-O8DR5<_GcL!Lhf}6bKj~z7A--bqoEum zjKilTfvfirM%^x{*v!&DW>9aeQTw}^*LFEUPVaHeBJ50Fbi|Ee3m|=0xoZS#1WiMb z&Ibs}NnOn)Z@Y$*-w2BWsvUlp4pl=mDP77MiOgC`%*B2xe>;GFzAd9v?nJb%8A8G` zb^ww!0JR`xH3*7BW4mZ++5$*}WTIBpd0B%Z$3vo1<2C@)7^_%}WQI*HvZCaJXiW>f z-wxJBsN80Ip>dKWu5nS9mevj+e>Ps~+O@m4GCE~i-2zme2@{no@$EZOj7xStcjoJ^+({v3tRcaX|9Ds?H~!~J#LXr{|B)0 zt~0ksPXCtlzFE+-6icPA24{0zcRSksX=%MlJ#sO+DzlV(-sFR~IT~bg=r*|j4*()? zSDLFjb$LC+&tv#e%D(m~gTcOVZx{6=89bt|zt2*K8gbL(-TwiZqE`;Cp<|u^0000< KMNUMnLSTYt*#0p9 diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 92cc3338dc..a87344e93c 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -22,6 +22,7 @@ POKEDEXGFXDIR := graphics/pokedex STARTERGFXDIR := graphics/starter_choose NAMINGGFXDIR := graphics/naming_screen SPINDAGFXDIR := graphics/pokemon/spinda/spots +TITLESCREENGFXDIR := graphics/title_screen types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark contest_types := cool beauty cute smart tough @@ -298,9 +299,13 @@ $(FONTGFXDIR)/frlg_female.fwjpnfont: $(FONTGFXDIR)/japanese_frlg_female.png ### Miscellaneous ### -graphics/title_screen/pokemon_logo.gbapal: %.gbapal: %.pal + +$(TITLESCREENGFXDIR)/pokemon_logo.gbapal: %.gbapal: %.pal $(GFX) $< $@ -num_colors 224 +$(TITLESCREENGFXDIR)/emerald_version.8bpp: %.8bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 4 + graphics/pokemon_jump/bg.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 63 -Wnum_tiles From b60da57d8aad9b025e867900e55ccb83947e383a Mon Sep 17 00:00:00 2001 From: Lactozilla Date: Tue, 12 Nov 2024 14:28:33 -0300 Subject: [PATCH 5/7] Remove usage of gHeap in sSpritePalettes_ContestantsTurnBlinkEffect Those offsets into gHeap are actually just inside of eContestTempSave. --- src/contest.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/contest.c b/src/contest.c index 5b9560faf5..40a42a3529 100644 --- a/src/contest.c +++ b/src/contest.c @@ -858,23 +858,22 @@ static const struct CompressedSpriteSheet sSpriteSheets_ContestantsTurnBlinkEffe } }; -// Yup this is super dangerous but that's how it is here static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] = { { - .data = (u16 *)(gHeap + 0x1A0A4), + .data = eContestTempSave.cachedWindowPalettes[5], .tag = TAG_BLINK_EFFECT_CONTESTANT0 }, { - .data = (u16 *)(gHeap + 0x1A0C4), + .data = eContestTempSave.cachedWindowPalettes[6], .tag = TAG_BLINK_EFFECT_CONTESTANT1 }, { - .data = (u16 *)(gHeap + 0x1A0E4), + .data = eContestTempSave.cachedWindowPalettes[7], .tag = TAG_BLINK_EFFECT_CONTESTANT2 }, { - .data = (u16 *)(gHeap + 0x1A104), + .data = eContestTempSave.cachedWindowPalettes[8], .tag = TAG_BLINK_EFFECT_CONTESTANT3 } }; From 13692076f9374a41d9ee57e7bb424fc1789cbdbc Mon Sep 17 00:00:00 2001 From: surtr-games Date: Thu, 14 Nov 2024 00:29:42 -0500 Subject: [PATCH 6/7] Fixed a bug with Counter and Mirror Coat where they would be scored up depending on the wrong target mon type category. --- data/battle_ai_scripts.s | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index a43c889502..19ee9d18a5 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -1613,6 +1613,8 @@ AI_CV_Disable2: AI_CV_Disable_End: end +@ BUG: The original script would score up Counter when the target's types were not physical +@ This is incorrect since Counter only deals double the damage received if hit by a physical attack AI_CV_Counter: if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Counter_ScoreDown1 if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Counter_ScoreDown1 @@ -1625,7 +1627,7 @@ AI_CV_Counter2: if_random_less_than 100, AI_CV_Counter3 score -1 AI_CV_Counter3: - if_has_move AI_USER, MOVE_MIRROR_COAT, AI_CV_Counter7 + if_has_move AI_USER, MOVE_MIRROR_COAT, AI_CV_Counter8 get_last_used_bank_move AI_TARGET get_move_power_from_result if_equal 0, AI_CV_Counter5 @@ -1645,15 +1647,24 @@ AI_CV_Counter5: if_random_less_than 100, AI_CV_Counter6 score +1 AI_CV_Counter6: +#ifdef BUGFIX + get_target_type1 + if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter7 + get_target_type2 + if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter7 + goto AI_CV_Counter_End +#else get_target_type1 if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End get_target_type2 if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End - if_random_less_than 50, AI_CV_Counter_End +#endif AI_CV_Counter7: - if_random_less_than 100, AI_CV_Counter8 - score +4 + if_random_less_than 50, AI_CV_Counter_End AI_CV_Counter8: + if_random_less_than 100, AI_CV_Counter9 + score +4 +AI_CV_Counter9: end AI_CV_Counter_ScoreDown1: @@ -2100,6 +2111,8 @@ AI_CV_PsychUp_ScoreDown2: AI_CV_PsychUp_End: end +@ BUG: The original script would score up Mirror Coat when the target's types were not special +@ This is incorrect since Mirror Coat only deals double the damage received if hit by a special attack AI_CV_MirrorCoat: if_status AI_TARGET, STATUS1_SLEEP, AI_CV_MirrorCoat_ScoreDown1 if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_MirrorCoat_ScoreDown1 @@ -2132,10 +2145,19 @@ AI_CV_MirrorCoat5: if_random_less_than 100, AI_CV_MirrorCoat6 score +1 AI_CV_MirrorCoat6: +#ifdef BUGFIX + get_target_type1 + if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat7 + get_target_type2 + if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat7 + goto AI_CV_MirrorCoat_End +#else get_target_type1 if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End get_target_type2 if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End +#endif +AI_CV_MirrorCoat7: if_random_less_than 50, AI_CV_MirrorCoat_End AI_CV_MirrorCoat_ScoreUp4: if_random_less_than 100, AI_CV_MirrorCoat_ScoreUp4_End From 6560bbab21ff171d7f0078d9f4966338f6466ef8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 23 Nov 2024 14:17:40 -0500 Subject: [PATCH 7/7] Restore .map file creation --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index a5f0224331..6252664bde 100644 --- a/Makefile +++ b/Makefile @@ -379,6 +379,7 @@ libagbsyscall: @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) # Elf from object files +LDFLAGS = -Map ../../$(MAP) $(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) libagbsyscall @cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat @echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ | cat"