Merge branch 'master' of https://github.com/pret/pokeemerald into porymap-6
This commit is contained in:
@@ -266,6 +266,8 @@ include audio_rules.mk
|
|||||||
# NOTE: Tools must have been built prior (FIXME)
|
# NOTE: Tools must have been built prior (FIXME)
|
||||||
# so you can't really call this rule directly
|
# so you can't really call this rule directly
|
||||||
generated: $(AUTO_GEN_TARGETS)
|
generated: $(AUTO_GEN_TARGETS)
|
||||||
|
@: # Silence the "Nothing to be done for `generated'" message, which some people were confusing for an error.
|
||||||
|
|
||||||
|
|
||||||
%.s: ;
|
%.s: ;
|
||||||
%.png: ;
|
%.png: ;
|
||||||
@@ -377,6 +379,7 @@ libagbsyscall:
|
|||||||
@$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN)
|
@$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN)
|
||||||
|
|
||||||
# Elf from object files
|
# Elf from object files
|
||||||
|
LDFLAGS = -Map ../../$(MAP)
|
||||||
$(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) libagbsyscall
|
$(ELF): $(LD_SCRIPT) $(LD_SCRIPT_DEPS) $(OBJS) libagbsyscall
|
||||||
@cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ $(OBJS_REL) $(LIB) | cat
|
@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 ../../$@ <objs> <libs> | cat"
|
@echo "cd $(OBJ_DIR) && $(LD) $(LDFLAGS) -T ../../$< --print-memory-usage -o ../../$@ <objs> <libs> | cat"
|
||||||
|
|||||||
@@ -1613,6 +1613,8 @@ AI_CV_Disable2:
|
|||||||
AI_CV_Disable_End:
|
AI_CV_Disable_End:
|
||||||
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:
|
AI_CV_Counter:
|
||||||
if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Counter_ScoreDown1
|
if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Counter_ScoreDown1
|
||||||
if_status2 AI_TARGET, STATUS2_INFATUATION, 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
|
if_random_less_than 100, AI_CV_Counter3
|
||||||
score -1
|
score -1
|
||||||
AI_CV_Counter3:
|
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_last_used_bank_move AI_TARGET
|
||||||
get_move_power_from_result
|
get_move_power_from_result
|
||||||
if_equal 0, AI_CV_Counter5
|
if_equal 0, AI_CV_Counter5
|
||||||
@@ -1645,15 +1647,24 @@ AI_CV_Counter5:
|
|||||||
if_random_less_than 100, AI_CV_Counter6
|
if_random_less_than 100, AI_CV_Counter6
|
||||||
score +1
|
score +1
|
||||||
AI_CV_Counter6:
|
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
|
get_target_type1
|
||||||
if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
|
if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
|
||||||
get_target_type2
|
get_target_type2
|
||||||
if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
|
if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
|
||||||
if_random_less_than 50, AI_CV_Counter_End
|
#endif
|
||||||
AI_CV_Counter7:
|
AI_CV_Counter7:
|
||||||
if_random_less_than 100, AI_CV_Counter8
|
if_random_less_than 50, AI_CV_Counter_End
|
||||||
score +4
|
|
||||||
AI_CV_Counter8:
|
AI_CV_Counter8:
|
||||||
|
if_random_less_than 100, AI_CV_Counter9
|
||||||
|
score +4
|
||||||
|
AI_CV_Counter9:
|
||||||
end
|
end
|
||||||
|
|
||||||
AI_CV_Counter_ScoreDown1:
|
AI_CV_Counter_ScoreDown1:
|
||||||
@@ -2100,6 +2111,8 @@ AI_CV_PsychUp_ScoreDown2:
|
|||||||
AI_CV_PsychUp_End:
|
AI_CV_PsychUp_End:
|
||||||
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:
|
AI_CV_MirrorCoat:
|
||||||
if_status AI_TARGET, STATUS1_SLEEP, AI_CV_MirrorCoat_ScoreDown1
|
if_status AI_TARGET, STATUS1_SLEEP, AI_CV_MirrorCoat_ScoreDown1
|
||||||
if_status2 AI_TARGET, STATUS2_INFATUATION, 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
|
if_random_less_than 100, AI_CV_MirrorCoat6
|
||||||
score +1
|
score +1
|
||||||
AI_CV_MirrorCoat6:
|
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
|
get_target_type1
|
||||||
if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
|
if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
|
||||||
get_target_type2
|
get_target_type2
|
||||||
if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
|
if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
|
||||||
|
#endif
|
||||||
|
AI_CV_MirrorCoat7:
|
||||||
if_random_less_than 50, AI_CV_MirrorCoat_End
|
if_random_less_than 50, AI_CV_MirrorCoat_End
|
||||||
AI_CV_MirrorCoat_ScoreUp4:
|
AI_CV_MirrorCoat_ScoreUp4:
|
||||||
if_random_less_than 100, AI_CV_MirrorCoat_ScoreUp4_End
|
if_random_less_than 100, AI_CV_MirrorCoat_ScoreUp4_End
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -22,6 +22,7 @@ POKEDEXGFXDIR := graphics/pokedex
|
|||||||
STARTERGFXDIR := graphics/starter_choose
|
STARTERGFXDIR := graphics/starter_choose
|
||||||
NAMINGGFXDIR := graphics/naming_screen
|
NAMINGGFXDIR := graphics/naming_screen
|
||||||
SPINDAGFXDIR := graphics/pokemon/spinda/spots
|
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
|
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
|
contest_types := cool beauty cute smart tough
|
||||||
@@ -298,9 +299,13 @@ $(FONTGFXDIR)/frlg_female.fwjpnfont: $(FONTGFXDIR)/japanese_frlg_female.png
|
|||||||
|
|
||||||
|
|
||||||
### Miscellaneous ###
|
### Miscellaneous ###
|
||||||
graphics/title_screen/pokemon_logo.gbapal: %.gbapal: %.pal
|
|
||||||
|
$(TITLESCREENGFXDIR)/pokemon_logo.gbapal: %.gbapal: %.pal
|
||||||
$(GFX) $< $@ -num_colors 224
|
$(GFX) $< $@ -num_colors 224
|
||||||
|
|
||||||
|
$(TITLESCREENGFXDIR)/emerald_version.8bpp: %.8bpp: %.png
|
||||||
|
$(GFX) $< $@ -mwidth 8 -mheight 4
|
||||||
|
|
||||||
graphics/pokemon_jump/bg.4bpp: %.4bpp: %.png
|
graphics/pokemon_jump/bg.4bpp: %.4bpp: %.png
|
||||||
$(GFX) $< $@ -num_tiles 63 -Wnum_tiles
|
$(GFX) $< $@ -num_tiles 63 -Wnum_tiles
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#ifndef GUARD_BARD_MUSIC_H
|
#ifndef GUARD_BARD_MUSIC_H
|
||||||
#define GUARD_BARD_MUSIC_H
|
#define GUARD_BARD_MUSIC_H
|
||||||
|
|
||||||
|
#define BARD_SOUND_MAX_LENGTH 6
|
||||||
|
|
||||||
struct BardSound
|
struct BardSound
|
||||||
{
|
{
|
||||||
/*0x00*/ u8 songLengthId;
|
/*0x00*/ u8 songLengthId;
|
||||||
@@ -26,8 +28,8 @@ struct BardSong
|
|||||||
/*0x06*/ u16 volume;
|
/*0x06*/ u16 volume;
|
||||||
/*0x08*/ s16 pitch;
|
/*0x08*/ s16 pitch;
|
||||||
/*0x0A*/ s16 voiceInflection;
|
/*0x0A*/ s16 voiceInflection;
|
||||||
/*0x0C*/ u16 lyrics[6];
|
/*0x0C*/ u16 lyrics[BARD_SOUND_MAX_LENGTH];
|
||||||
/*0x18*/ struct BardPhoneme phonemes[6];
|
/*0x18*/ struct BardPhoneme phonemes[BARD_SOUND_MAX_LENGTH];
|
||||||
/*0x30*/ const struct BardSound *sound;
|
/*0x30*/ const struct BardSound *sound;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ void GetWordPhonemes(struct BardSong *song, u16 word)
|
|||||||
const struct BardSound *sound;
|
const struct BardSound *sound;
|
||||||
|
|
||||||
song->length = 0;
|
song->length = 0;
|
||||||
for (i = 0; i < 6; i ++)
|
for (i = 0; i < BARD_SOUND_MAX_LENGTH; i ++)
|
||||||
{
|
{
|
||||||
sound = &song->sound[i];
|
sound = &song->sound[i];
|
||||||
if (sound->songLengthId != 0xFF)
|
if (sound->songLengthId != 0xFF)
|
||||||
|
|||||||
+4
-5
@@ -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] =
|
static const struct SpritePalette sSpritePalettes_ContestantsTurnBlinkEffect[CONTESTANT_COUNT] =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
.data = (u16 *)(gHeap + 0x1A0A4),
|
.data = eContestTempSave.cachedWindowPalettes[5],
|
||||||
.tag = TAG_BLINK_EFFECT_CONTESTANT0
|
.tag = TAG_BLINK_EFFECT_CONTESTANT0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.data = (u16 *)(gHeap + 0x1A0C4),
|
.data = eContestTempSave.cachedWindowPalettes[6],
|
||||||
.tag = TAG_BLINK_EFFECT_CONTESTANT1
|
.tag = TAG_BLINK_EFFECT_CONTESTANT1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.data = (u16 *)(gHeap + 0x1A0E4),
|
.data = eContestTempSave.cachedWindowPalettes[7],
|
||||||
.tag = TAG_BLINK_EFFECT_CONTESTANT2
|
.tag = TAG_BLINK_EFFECT_CONTESTANT2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.data = (u16 *)(gHeap + 0x1A104),
|
.data = eContestTempSave.cachedWindowPalettes[8],
|
||||||
.tag = TAG_BLINK_EFFECT_CONTESTANT3
|
.tag = TAG_BLINK_EFFECT_CONTESTANT3
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
const u16 gNumBardWords_Moves = MOVES_COUNT;
|
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] = {
|
[MOVE_NONE] = {
|
||||||
NULL_BARD_SOUND,
|
NULL_BARD_SOUND,
|
||||||
NULL_BARD_SOUND,
|
NULL_BARD_SOUND,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
const u16 gNumBardWords_Species = NUM_SPECIES;
|
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] = {
|
[SPECIES_NONE] = {
|
||||||
NULL_BARD_SOUND,
|
NULL_BARD_SOUND,
|
||||||
NULL_BARD_SOUND,
|
NULL_BARD_SOUND,
|
||||||
|
|||||||
+17
-15
@@ -5684,7 +5684,7 @@ u16 SpeciesToCryId(u16 species)
|
|||||||
// To draw a spot pixel, add 4 to the color index
|
// To draw a spot pixel, add 4 to the color index
|
||||||
#define SPOT_COLOR_ADJUSTMENT 4
|
#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
|
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
|
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.
|
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
|
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).
|
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
|
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
|
pixel is between FIRST_SPOT_COLOR and LAST_SPOT_COLOR (so only colors 1, 2, or 3 on Spinda will
|
||||||
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
|
||||||
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 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
|
The above is done in TRY_DRAW_SPOT_PIXEL two different ways: one with << 4, and one without.
|
||||||
is because Spinda's sprite is a 4 bits per pixel image, but the pointer to Spinda's pixels
|
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
|
(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.
|
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) \
|
#define DRAW_SPINDA_SPOTS(personality, dest) \
|
||||||
{ \
|
{ \
|
||||||
s32 i; \
|
s32 i; \
|
||||||
@@ -5737,17 +5745,11 @@ u16 SpeciesToCryId(u16 species)
|
|||||||
/* of the two pixels is being considered for drawing */ \
|
/* of the two pixels is being considered for drawing */ \
|
||||||
if (column & 1) \
|
if (column & 1) \
|
||||||
{ \
|
{ \
|
||||||
/* Draw spot pixel if this is Spinda's body color */ \
|
TRY_DRAW_SPOT_PIXEL(destPixels, 4); \
|
||||||
if ((u8)((*destPixels & 0xF0) - (FIRST_SPOT_COLOR << 4))\
|
|
||||||
<= ((LAST_SPOT_COLOR - FIRST_SPOT_COLOR) << 4))\
|
|
||||||
*destPixels += (SPOT_COLOR_ADJUSTMENT << 4); \
|
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
/* Draw spot pixel if this is Spinda's body color */ \
|
TRY_DRAW_SPOT_PIXEL(destPixels, 0); \
|
||||||
if ((u8)((*destPixels & 0xF) - FIRST_SPOT_COLOR) \
|
|
||||||
<= (LAST_SPOT_COLOR - FIRST_SPOT_COLOR)) \
|
|
||||||
*destPixels += SPOT_COLOR_ADJUSTMENT; \
|
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
|
|||||||
Reference in New Issue
Block a user