mirror of
https://github.com/rh-hideout/pokeemerald-expansion.git
synced 2026-03-21 18:04:50 -05:00
Merge 7a3ec0182a into 47cac73a61
This commit is contained in:
commit
cdf04993b0
|
|
@ -732,7 +732,10 @@
|
|||
OBJ_ID_NONE = 0
|
||||
|
||||
@ Configures the arguments for a trainer battle, then jumps to the appropriate script in scripts/trainer_battle.inc
|
||||
.macro trainerbattle type:req localIdA:req, trainer_a:req, intro_text_a:req, lose_text_a:req, event_script_a:req, localIdB:req, trainer_b:req, intro_text_b:req, lose_text_b:req, event_script_b:req, victory_text:req, cannot_battle:req, isDouble:req, playMusicA:req, playMusicB:req, isRematch:req, rival_battle_flags=0
|
||||
.macro trainerbattle type:req \
|
||||
localIdA:req, trainer_a:req, intro_text_a:req, lose_text_a:req, event_script_a:req, \
|
||||
localIdB:req, trainer_b:req, intro_text_b:req, lose_text_b:req, event_script_b:req, \
|
||||
victory_text:req, cannot_battle:req, isDouble:req, playMusicA:req, playMusicB:req, isRematch:req, rival_battle_flags=0
|
||||
.byte SCR_OP_TRAINERBATTLE
|
||||
.set trainerbattle_flags, 0
|
||||
.ifgt \isDouble; .set trainerbattle_flags, trainerbattle_flags | (1 << 0); .endif
|
||||
|
|
@ -762,11 +765,20 @@
|
|||
@ When used with an event script, you can also pass in an optional flag to disable music
|
||||
.macro trainerbattle_single trainer:req, intro_text:req, lose_text:req, event_script=FALSE, music=TRUE
|
||||
.if \event_script == FALSE
|
||||
trainerbattle TRAINER_BATTLE_SINGLE, LOCALID_NONE, \trainer, \intro_text, \lose_text, NULL, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
trainerbattle TRAINER_BATTLE_SINGLE, \
|
||||
LOCALID_NONE, \trainer, \intro_text, \lose_text, NULL, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
.elseif \music == TRUE
|
||||
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, LOCALID_NONE, \trainer, \intro_text, \lose_text, \event_script, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT, \
|
||||
LOCALID_NONE, \trainer, \intro_text, \lose_text, \event_script, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
.else
|
||||
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC, LOCALID_NONE, \trainer, \intro_text, \lose_text, \event_script, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_NO_MUSIC, \
|
||||
LOCALID_NONE, \trainer, \intro_text, \lose_text, \event_script, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
.endif
|
||||
.endm
|
||||
|
||||
|
|
@ -774,38 +786,62 @@
|
|||
@ and an optional event script. When used with an event script you can pass in an optional flag to disable music
|
||||
.macro trainerbattle_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req, event_script=FALSE, music=TRUE
|
||||
.if \event_script == FALSE
|
||||
trainerbattle TRAINER_BATTLE_DOUBLE, LOCALID_NONE, \trainer, \intro_text, \lose_text, NULL, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, TRUE, FALSE, FALSE
|
||||
trainerbattle TRAINER_BATTLE_DOUBLE, \
|
||||
LOCALID_NONE, \trainer, \intro_text, \lose_text, NULL, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, \not_enough_pkmn_text, TRUE, TRUE, FALSE, FALSE
|
||||
.elseif \music == TRUE
|
||||
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE, LOCALID_NONE, \trainer, \intro_text, \lose_text, \event_script, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, TRUE, FALSE, FALSE
|
||||
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE, \
|
||||
LOCALID_NONE, \trainer, \intro_text, \lose_text, \event_script, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, \not_enough_pkmn_text, TRUE, TRUE, FALSE, FALSE
|
||||
.else
|
||||
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC, LOCALID_NONE, \trainer, \intro_text, \lose_text, \event_script, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, TRUE, FALSE, FALSE, FALSE
|
||||
trainerbattle TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC, \
|
||||
LOCALID_NONE, \trainer, \intro_text, \lose_text, \event_script, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, \not_enough_pkmn_text, TRUE, FALSE, FALSE, FALSE
|
||||
.endif
|
||||
.endm
|
||||
|
||||
@ Starts a rematch battle. Takes a trainer, intro text and loss text
|
||||
.macro trainerbattle_rematch trainer:req, intro_text:req, lose_text:req
|
||||
trainerbattle TRAINER_BATTLE_REMATCH, LOCALID_NONE, \trainer, \intro_text, \lose_text, NULL, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, TRUE
|
||||
trainerbattle TRAINER_BATTLE_REMATCH, \
|
||||
LOCALID_NONE, \trainer, \intro_text, \lose_text, NULL, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, NULL, FALSE, TRUE, FALSE, TRUE
|
||||
.endm
|
||||
|
||||
@ Starts a rematch double battle. Takes a trainer, intro text, loss text, and text for when you have too few pokemon
|
||||
.macro trainerbattle_rematch_double trainer:req, intro_text:req, lose_text:req, not_enough_pkmn_text:req
|
||||
trainerbattle TRAINER_BATTLE_REMATCH_DOUBLE, LOCALID_NONE, \trainer, \intro_text, \lose_text, NULL, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, \not_enough_pkmn_text, FALSE, TRUE, FALSE, TRUE
|
||||
trainerbattle TRAINER_BATTLE_REMATCH_DOUBLE, \
|
||||
LOCALID_NONE, \trainer, \intro_text, \lose_text, NULL, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, \not_enough_pkmn_text, FALSE, TRUE, FALSE, TRUE
|
||||
.endm
|
||||
|
||||
@ Starts a trainer battle, skipping intro text. Takes a trainer and loss text
|
||||
.macro trainerbattle_no_intro trainer:req, lose_text:req
|
||||
trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, LOCALID_NONE, \trainer, NULL, \lose_text, NULL, LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, \
|
||||
LOCALID_NONE, \trainer, NULL, \lose_text, NULL, \
|
||||
LOCALID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
.endm
|
||||
|
||||
@ Starts a double battle with the player against two trainers
|
||||
@ Takes two trainers and defeat text for each
|
||||
.macro trainerbattle_two_trainers trainer_a:req, lose_text_a:req, trainer_b:req, lose_text_b:req
|
||||
trainerbattle TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO, OBJ_ID_NONE, \trainer_a, NULL, \lose_text_a, NULL, OBJ_ID_NONE, \trainer_b, NULL, \lose_text_b, NULL, NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
trainerbattle TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO, \
|
||||
OBJ_ID_NONE, \trainer_a, NULL, \lose_text_a, NULL, \
|
||||
OBJ_ID_NONE, \trainer_b, NULL, \lose_text_b, NULL, \
|
||||
NULL, NULL, FALSE, TRUE, FALSE, FALSE
|
||||
.endm
|
||||
|
||||
@ Starts a trainer battle with victory text if the player loses. If flags is nonzero, the player will be healed after battle (and its assumed to be the tutorial battle)
|
||||
.macro trainerbattle_earlyrival trainer:req, flags:req, lose_text:req, victory_text:req
|
||||
trainerbattle TRAINER_BATTLE_EARLY_RIVAL, OBJ_ID_NONE, \trainer, NULL, \lose_text, NULL, OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, \victory_text, NULL, FALSE, TRUE, FALSE, FALSE, \flags
|
||||
trainerbattle TRAINER_BATTLE_EARLY_RIVAL, \
|
||||
OBJ_ID_NONE, \trainer, NULL, \lose_text, NULL, \
|
||||
OBJ_ID_NONE, TRAINER_NONE, NULL, NULL, NULL, \
|
||||
\victory_text, NULL, FALSE, TRUE, FALSE, FALSE, \flags
|
||||
.endm
|
||||
|
||||
@ Starts a trainer battle using the battle information stored in RAM (usually by the scripts in trainer_battle.inc, which
|
||||
|
|
@ -1017,7 +1053,12 @@
|
|||
|
||||
@ Gives the player a Pokémon of the specified species and level, and allows to customize extra parameters.
|
||||
@ VAR_RESULT will be set to MON_GIVEN_TO_PARTY, MON_GIVEN_TO_PC, or MON_CANT_GIVE depending on the outcome.
|
||||
.macro givemon species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, shinyMode, gmaxFactor, teraType, dmaxLevel
|
||||
.macro givemon species:req, level:req, \
|
||||
item, ball, nature, abilityNum, gender, \
|
||||
hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, \
|
||||
hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, \
|
||||
move1, move2, move3, move4, \
|
||||
shinyMode, gmaxFactor, teraType, dmaxLevel
|
||||
callnative ScrCmd_createmon, requests_effects=1
|
||||
.byte 0
|
||||
.byte PARTY_SIZE @ assign to first empty slot
|
||||
|
|
@ -1079,7 +1120,12 @@
|
|||
|
||||
@ creates a mon for a given party and slot
|
||||
@ otherwise
|
||||
.macro createmon side:req, slot:req, species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, shinyMode, gmaxFactor, teraType, dmaxLevel
|
||||
.macro createmon side:req, slot:req, species:req, level:req, \
|
||||
item, ball, nature, abilityNum, gender, \
|
||||
hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, \
|
||||
hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, \
|
||||
move1, move2, move3, move4, \
|
||||
shinyMode, gmaxFactor, teraType, dmaxLevel
|
||||
callnative ScrCmd_createmon, requests_effects=1
|
||||
.byte \side @ 0 - player, 1 - opponent
|
||||
.byte \slot @ 0-5
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ AsmFile::AsmFile(std::string filename, bool isStdin, bool doEnum) : m_filename(f
|
|||
m_lineNum = 1;
|
||||
m_lineStart = 0;
|
||||
|
||||
ConsumeLineSkip();
|
||||
RemoveComments();
|
||||
}
|
||||
|
||||
|
|
@ -123,6 +124,31 @@ void AsmFile::RemoveComments()
|
|||
}
|
||||
}
|
||||
|
||||
void AsmFile::ConsumeLineSkip()
|
||||
{
|
||||
long pos = 0;
|
||||
|
||||
while (m_buffer[pos] != 0)
|
||||
{
|
||||
if (m_buffer[pos] == '\\')
|
||||
{
|
||||
long p = pos;
|
||||
pos++;
|
||||
|
||||
while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t')
|
||||
pos++;
|
||||
|
||||
if (m_buffer[pos] == '\n')
|
||||
{
|
||||
m_buffer[p] = ' ';
|
||||
m_buffer[pos] = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
||||
// Checks if we're at a particular directive and if so, consumes it.
|
||||
// Returns whether the directive was found.
|
||||
bool AsmFile::CheckForDirective(std::string name)
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ private:
|
|||
bool ConsumeComma();
|
||||
int ReadPadLength();
|
||||
void RemoveComments();
|
||||
void ConsumeLineSkip();
|
||||
bool CheckForDirective(std::string name);
|
||||
void SkipWhitespace();
|
||||
void ExpectEmptyRestOfLine();
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user