2017-10-01 03:19:29 +02:00
|
|
|
#include "global.h"
|
2017-10-12 09:06:19 +02:00
|
|
|
#include "battle_frontier_2.h"
|
|
|
|
#include "battle_setup.h"
|
|
|
|
#include "berry.h"
|
|
|
|
#include "clock.h"
|
|
|
|
#include "coins.h"
|
|
|
|
#include "contest_link_80F57C4.h"
|
|
|
|
#include "contest_painting.h"
|
|
|
|
#include "data2.h"
|
|
|
|
#include "decoration.h"
|
|
|
|
#include "decoration_inventory.h"
|
|
|
|
#include "event_data.h"
|
|
|
|
#include "field_door.h"
|
|
|
|
#include "field_effect.h"
|
|
|
|
#include "field_fadetransition.h"
|
|
|
|
#include "field_map_obj.h"
|
|
|
|
#include "field_map_obj_helpers.h"
|
|
|
|
#include "field_message_box.h"
|
|
|
|
#include "field_player_avatar.h"
|
|
|
|
#include "field_screen_effect.h"
|
|
|
|
#include "field_specials.h"
|
|
|
|
#include "field_tasks.h"
|
|
|
|
#include "field_weather.h"
|
|
|
|
#include "fieldmap.h"
|
|
|
|
#include "item.h"
|
|
|
|
#include "lilycove_lady.h"
|
|
|
|
#include "main.h"
|
|
|
|
#include "map_obj_lock.h"
|
|
|
|
#include "money.h"
|
|
|
|
#include "mystery_event_script.h"
|
|
|
|
#include "new_menu_helpers.h"
|
|
|
|
#include "palette.h"
|
|
|
|
#include "party_menu.h"
|
|
|
|
#include "pokemon_3.h"
|
|
|
|
#include "pokemon_storage_system.h"
|
|
|
|
#include "rng.h"
|
|
|
|
#include "overworld.h"
|
|
|
|
#include "rtc.h"
|
|
|
|
#include "script.h"
|
|
|
|
#include "script_menu.h"
|
|
|
|
#include "script_movement.h"
|
|
|
|
#include "script_pokemon_80F8.h"
|
|
|
|
#include "script_pokemon_81B9.h"
|
|
|
|
#include "shop.h"
|
|
|
|
#include "slot_machine.h"
|
|
|
|
#include "sound.h"
|
|
|
|
#include "string_util.h"
|
|
|
|
#include "text.h"
|
|
|
|
#include "trainer_see.h"
|
|
|
|
#include "tv.h"
|
|
|
|
#include "window.h"
|
|
|
|
|
|
|
|
typedef u16 (*SpecialFunc)(void);
|
|
|
|
typedef void (*NativeFunc)(void);
|
|
|
|
|
|
|
|
extern u32 gUnknown_020375C0;
|
|
|
|
|
|
|
|
static EWRAM_DATA u32 gUnknown_020375C4 = 0;
|
|
|
|
static EWRAM_DATA u16 sPauseCounter = 0;
|
|
|
|
static EWRAM_DATA u16 sMovingNpcId = 0;
|
|
|
|
static EWRAM_DATA u16 sMovingNpcMapBank = 0;
|
|
|
|
static EWRAM_DATA u16 sMovingNpcMapId = 0;
|
|
|
|
static EWRAM_DATA u16 sFieldEffectScriptId = 0;
|
2017-10-01 03:19:29 +02:00
|
|
|
|
2017-10-12 09:06:19 +02:00
|
|
|
extern u16 gSpecialVar_0x8000;
|
|
|
|
extern u16 gSpecialVar_0x8001;
|
|
|
|
extern u16 gSpecialVar_0x8002;
|
|
|
|
extern u16 gSpecialVar_0x8004;
|
2017-10-01 03:19:29 +02:00
|
|
|
|
2017-10-12 09:06:19 +02:00
|
|
|
extern u16 gScriptResult;
|
|
|
|
|
|
|
|
extern u16 gScriptContestCategory;
|
2017-10-01 03:19:29 +02:00
|
|
|
|
|
|
|
IWRAM_DATA u8 gUnknown_03000F30;
|
|
|
|
|
2017-10-12 21:36:26 +02:00
|
|
|
extern const SpecialFunc gSpecials[];
|
|
|
|
extern const u8 *gStdScripts[];
|
|
|
|
extern const u8 *gStdScripts_End[];
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
void sub_809BDB4(void);
|
|
|
|
|
|
|
|
// This is defined in here so the optimizer can't see its value when compiling
|
|
|
|
// script.c.
|
|
|
|
void * const gNullScriptPtr = NULL;
|
|
|
|
|
|
|
|
static const u8 sScriptConditionTable[6][3] =
|
|
|
|
{
|
|
|
|
// < = >
|
|
|
|
1, 0, 0, // <
|
|
|
|
0, 1, 0, // =
|
|
|
|
0, 0, 1, // >
|
|
|
|
1, 1, 0, // <=
|
|
|
|
0, 1, 1, // >=
|
|
|
|
1, 0, 1, // !=
|
|
|
|
};
|
|
|
|
|
|
|
|
static u8 * const sScriptStringVars[] =
|
|
|
|
{
|
|
|
|
gStringVar1,
|
|
|
|
gStringVar2,
|
|
|
|
gStringVar3,
|
|
|
|
};
|
|
|
|
|
|
|
|
bool8 ScrCmd_nop(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_nop1(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_end(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
StopScript(ctx);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_gotonative(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
bool8 (*addr)(void) = (bool8 (*)(void))ScriptReadWord(ctx);
|
|
|
|
|
|
|
|
SetupNativeScript(ctx, addr);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_special(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 index = ScriptReadHalfword(ctx);
|
|
|
|
|
|
|
|
gSpecials[index]();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_specialvar(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 *var = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
*var = gSpecials[ScriptReadHalfword(ctx)]();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_callnative(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
NativeFunc func = (NativeFunc)ScriptReadWord(ctx);
|
|
|
|
|
|
|
|
func();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitstate(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_goto(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *ptr = (const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ScriptJump(ctx, ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_return(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
ScriptReturn(ctx);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_call(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *ptr = (const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ScriptCall(ctx, ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_goto_if(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 condition = ScriptReadByte(ctx);
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *ptr = (const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
|
|
|
|
ScriptJump(ctx, ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_call_if(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 condition = ScriptReadByte(ctx);
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *ptr = (const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
|
|
|
|
ScriptCall(ctx, ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setvaddress(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 addr1 = (u32)ctx->scriptPtr - 1;
|
|
|
|
u32 addr2 = ScriptReadWord(ctx);
|
|
|
|
|
|
|
|
gUnknown_020375C4 = addr2 - addr1;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_vgoto(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 addr = ScriptReadWord(ctx);
|
|
|
|
|
|
|
|
ScriptJump(ctx, (u8 *)(addr - gUnknown_020375C4));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_vcall(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 addr = ScriptReadWord(ctx);
|
|
|
|
|
|
|
|
ScriptCall(ctx, (u8 *)(addr - gUnknown_020375C4));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_vgoto_if(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 condition = ScriptReadByte(ctx);
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *ptr = (const u8 *)(ScriptReadWord(ctx) - gUnknown_020375C4);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
|
|
|
|
ScriptJump(ctx, ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_vcall_if(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 condition = ScriptReadByte(ctx);
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *ptr = (const u8 *)(ScriptReadWord(ctx) - gUnknown_020375C4);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
|
|
|
|
ScriptCall(ctx, ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_gotostd(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 index = ScriptReadByte(ctx);
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 **ptr = &gStdScripts[index];
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (ptr < gStdScripts_End)
|
|
|
|
ScriptJump(ctx, *ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_callstd(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 index = ScriptReadByte(ctx);
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 **ptr = &gStdScripts[index];
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (ptr < gStdScripts_End)
|
|
|
|
ScriptCall(ctx, *ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_gotostd_if(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 condition = ScriptReadByte(ctx);
|
|
|
|
u8 index = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 **ptr = &gStdScripts[index];
|
2017-10-12 09:06:19 +02:00
|
|
|
if (ptr < gStdScripts_End)
|
|
|
|
ScriptJump(ctx, *ptr);
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_callstd_if(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 condition = ScriptReadByte(ctx);
|
|
|
|
u8 index = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 **ptr = &gStdScripts[index];
|
2017-10-12 09:06:19 +02:00
|
|
|
if (ptr < gStdScripts_End)
|
|
|
|
ScriptCall(ctx, *ptr);
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_gotoram(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
ScriptJump(ctx, (const u8 *)gUnknown_020375C0);
|
2017-10-12 09:06:19 +02:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_killscript(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
ClearRamScript();
|
|
|
|
StopScript(ctx);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setmysteryeventstatus(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 value = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
SetMysteryEventScriptStatus(value);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_loadword(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 index = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
ctx->data[index] = ScriptReadWord(ctx);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_loadbytefromaddr(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 index = ScriptReadByte(ctx);
|
|
|
|
|
2017-10-12 21:36:26 +02:00
|
|
|
ctx->data[index] = *(const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_writebytetoaddr(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 value = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
*(u8 *)ScriptReadWord(ctx) = value;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_loadbyte(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 index = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
ctx->data[index] = ScriptReadByte(ctx);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setptrbyte(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 index = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
*(u8 *)ScriptReadWord(ctx) = ctx->data[index];
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_copylocal(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 destIndex = ScriptReadByte(ctx);
|
|
|
|
u8 srcIndex = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
ctx->data[destIndex] = ctx->data[srcIndex];
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_copybyte(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 *ptr = (u8 *)ScriptReadWord(ctx);
|
2017-10-12 21:36:26 +02:00
|
|
|
*ptr = *(const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setvar(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
*ptr = ScriptReadHalfword(ctx);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_copyvar(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
*ptr = *GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setorcopyvar(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
*ptr = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 compare_012(u16 a1, u16 a2)
|
|
|
|
{
|
|
|
|
if (a1 < a2)
|
|
|
|
return 0;
|
|
|
|
if (a1 == a2)
|
|
|
|
return 1;
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// comparelocaltolocal
|
|
|
|
bool8 ScrCmd_compare_local_to_local(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 value1 = ctx->data[ScriptReadByte(ctx)];
|
|
|
|
const u8 value2 = ctx->data[ScriptReadByte(ctx)];
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ctx->comparisonResult = compare_012(value1, value2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// comparelocaltoimm
|
|
|
|
bool8 ScrCmd_compare_local_to_value(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 value1 = ctx->data[ScriptReadByte(ctx)];
|
|
|
|
const u8 value2 = ScriptReadByte(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ctx->comparisonResult = compare_012(value1, value2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_compare_local_to_addr(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 value1 = ctx->data[ScriptReadByte(ctx)];
|
|
|
|
const u8 value2 = *(const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ctx->comparisonResult = compare_012(value1, value2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_compare_addr_to_local(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 value1 = *(const u8 *)ScriptReadWord(ctx);
|
|
|
|
const u8 value2 = ctx->data[ScriptReadByte(ctx)];
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ctx->comparisonResult = compare_012(value1, value2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_compare_addr_to_value(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 value1 = *(const u8 *)ScriptReadWord(ctx);
|
|
|
|
const u8 value2 = ScriptReadByte(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ctx->comparisonResult = compare_012(value1, value2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_compare_addr_to_addr(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 value1 = *(const u8 *)ScriptReadWord(ctx);
|
|
|
|
const u8 value2 = *(const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ctx->comparisonResult = compare_012(value1, value2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_compare_var_to_value(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u16 value1 = *GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
const u16 value2 = ScriptReadHalfword(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ctx->comparisonResult = compare_012(value1, value2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_compare_var_to_var(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u16 *ptr1 = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
const u16 *ptr2 = GetVarPointer(ScriptReadHalfword(ctx));
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ctx->comparisonResult = compare_012(*ptr1, *ptr2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_addvar(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
*ptr += ScriptReadHalfword(ctx);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_subvar(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
*ptr -= VarGet(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_random(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 max = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = Random() % max;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_additem(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u32 quantity = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = AddBagItem(itemId, (u8)quantity);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_removeitem(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u32 quantity = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = RemoveBagItem(itemId, (u8)quantity);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkitemspace(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u32 quantity = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = CheckBagHasSpace(itemId, (u8)quantity);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkitem(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u32 quantity = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = CheckBagHasItem(itemId, (u8)quantity);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = GetPocketByItemId(itemId);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_addpcitem(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 quantity = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = AddPCItem(itemId, quantity);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 quantity = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = CheckPCHasItem(itemId, quantity);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_adddecor(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 decorId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = DecorationAdd(decorId);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_removedecor(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 decorId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = DecorationRemove(decorId);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkdecor(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 decorId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = DecorationCheckSpace(decorId);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_hasdecor(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 decorId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = CheckHasDecoration(decorId);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setflag(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
FlagSet(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_clearflag(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
FlagClear(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkflag(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
ctx->comparisonResult = FlagGet(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
IncrementGameStat(ScriptReadByte(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_animdarklevel(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_80B009C(ScriptReadByte(ctx));
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setdarklevel(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 flashLevel = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetFlashLevel(flashLevel);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool8 IsPaletteNotActive(void)
|
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
return TRUE;
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_fadescreen(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
fade_screen(ScriptReadByte(ctx), 0);
|
|
|
|
SetupNativeScript(ctx, IsPaletteNotActive);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 duration = ScriptReadByte(ctx);
|
|
|
|
u8 delay = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
fade_screen(duration, delay);
|
|
|
|
SetupNativeScript(ctx, IsPaletteNotActive);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
int ScrCmd_cmdDC(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 duration = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
switch (duration)
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
default:
|
|
|
|
CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE);
|
|
|
|
fade_screen(duration, 0);
|
|
|
|
break;
|
|
|
|
case 0:
|
|
|
|
case 2:
|
|
|
|
CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE);
|
|
|
|
fade_screen(duration, 0);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
SetupNativeScript(ctx, IsPaletteNotActive);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool8 RunPauseTimer(void)
|
|
|
|
{
|
|
|
|
sPauseCounter--;
|
|
|
|
|
|
|
|
if (sPauseCounter == 0)
|
|
|
|
return TRUE;
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_delay(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sPauseCounter = ScriptReadHalfword(ctx);
|
|
|
|
SetupNativeScript(ctx, RunPauseTimer);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_initclock(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 hour = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 minute = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
RtcInitLocalTimeOffset(hour, minute);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_dodailyevents(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
DoTimeBasedEvents();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_gettime(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
RtcCalcLocalTime();
|
|
|
|
gSpecialVar_0x8000 = gLocalTime.hours;
|
|
|
|
gSpecialVar_0x8001 = gLocalTime.minutes;
|
|
|
|
gSpecialVar_0x8002 = gLocalTime.seconds;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setweather(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 weather = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
SetSav1Weather(weather);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_resetweather(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_80AEDBC();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_doweather(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
DoCurrentWeather();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_tileeffect(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
ActivatePerStepCallback(ScriptReadByte(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setmaplayoutindex(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 value = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sub_8085524(value);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_warp(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
|
|
|
sub_80AF734();
|
|
|
|
player_avatar_init_params_reset();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_warpsilent(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
|
|
|
sp13E_warp_to_last_warp();
|
|
|
|
player_avatar_init_params_reset();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_warpdoor(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
|
|
|
sub_80AF7D0();
|
|
|
|
player_avatar_init_params_reset();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_warphole(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u16 x;
|
|
|
|
u16 y;
|
|
|
|
|
|
|
|
PlayerGetDestCoords(&x, &y);
|
|
|
|
if (mapGroup == 0xFF && mapNum == 0xFF)
|
|
|
|
sub_8084EBC(x - 7, y - 7);
|
|
|
|
else
|
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, -1, x - 7, y - 7);
|
|
|
|
sp13F_fall_to_last_warp();
|
|
|
|
player_avatar_init_params_reset();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_warpteleport(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
|
|
|
sub_80AF848();
|
|
|
|
player_avatar_init_params_reset();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD7(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
|
|
|
sub_80AF87C();
|
|
|
|
player_avatar_init_params_reset();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setwarp(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setdynamicwarp(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
saved_warp2_set_2(0, mapGroup, mapNum, warpId, x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setdivewarp(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sub_8084E2C(mapGroup, mapNum, warpId, x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setholewarp(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sub_8084E80(mapGroup, mapNum, warpId, x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setescapewarp(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sub_8084DD4(mapGroup, mapNum, warpId, x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getplayerxy(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 *pX = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
u16 *pY = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
*pX = gSaveBlock1Ptr->pos.x;
|
|
|
|
*pY = gSaveBlock1Ptr->pos.y;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_countpokemon(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
gScriptResult = CalculatePlayerPartyCount();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_playse(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
PlaySE(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool8 WaitForSoundEffectFinish(void)
|
|
|
|
{
|
|
|
|
if (!IsSEPlaying())
|
|
|
|
return TRUE;
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitse(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
SetupNativeScript(ctx, WaitForSoundEffectFinish);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_playfanfare(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
PlayFanfare(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool8 WaitForFanfareFinish(void)
|
|
|
|
{
|
|
|
|
return IsFanfareTaskInactive();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
SetupNativeScript(ctx, WaitForFanfareFinish);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_playbgm(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 songId = ScriptReadHalfword(ctx);
|
|
|
|
bool8 val = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (val == TRUE)
|
|
|
|
Overworld_SetSavedMusic(songId);
|
|
|
|
PlayNewMapMusic(songId);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_savebgm(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
Overworld_SetSavedMusic(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_fadedefaultbgm(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
Overworld_ChangeMusicToDefault();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_fadenewbgm(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
Overworld_ChangeMusicTo(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_fadeoutbgm(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 speed = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (speed != 0)
|
|
|
|
FadeOutBGMTemporarily(4 * speed);
|
|
|
|
else
|
|
|
|
FadeOutBGMTemporarily(4);
|
|
|
|
SetupNativeScript(ctx, IsBGMPausedOrStopped);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_fadeinbgm(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 speed = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (speed != 0)
|
|
|
|
FadeInBGM(4 * speed);
|
|
|
|
else
|
|
|
|
FadeInBGM(4);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_applymovement(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
2017-10-12 21:36:26 +02:00
|
|
|
const void *movementScript = (const void *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript);
|
|
|
|
sMovingNpcId = localId;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_applymovement_at(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
2017-10-12 21:36:26 +02:00
|
|
|
const void *movementScript = (const void *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
ScriptMovement_StartObjectMovementScript(localId, mapNum, mapGroup, movementScript);
|
|
|
|
sMovingNpcId = localId;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool8 WaitForMovementFinish(void)
|
|
|
|
{
|
|
|
|
return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitmovement(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
if (localId != 0)
|
|
|
|
sMovingNpcId = localId;
|
|
|
|
sMovingNpcMapBank = gSaveBlock1Ptr->location.mapGroup;
|
|
|
|
sMovingNpcMapId = gSaveBlock1Ptr->location.mapNum;
|
|
|
|
SetupNativeScript(ctx, WaitForMovementFinish);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitmovement_at(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 mapBank;
|
|
|
|
u8 mapId;
|
|
|
|
|
|
|
|
if (localId != 0)
|
|
|
|
sMovingNpcId = localId;
|
|
|
|
mapBank = ScriptReadByte(ctx);
|
|
|
|
mapId = ScriptReadByte(ctx);
|
|
|
|
sMovingNpcMapBank = mapBank;
|
|
|
|
sMovingNpcMapId = mapId;
|
|
|
|
SetupNativeScript(ctx, WaitForMovementFinish);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_removeobject(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
RemoveFieldObjectByLocalIdAndMap(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_removeobject_at(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 objectId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
RemoveFieldObjectByLocalIdAndMap(objectId, mapNum, mapGroup);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_addobject(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 objectId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
show_sprite(objectId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_addobject_at(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 objectId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
show_sprite(objectId, mapNum, mapGroup);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setobjectxy(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sub_808EBA8(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setobjectxyperm(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetMapObjTemplateCoords(localId, x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_moveobjectoffscreen(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sub_808F254(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_showobject(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
npc_by_local_id_and_map_set_field_1_bit_x20(localId, mapNum, mapGroup, 0);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_hideobject(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
npc_by_local_id_and_map_set_field_1_bit_x20(localId, mapNum, mapGroup, 1);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setobjectpriority(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 priority = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
sub_808E78C(localId, mapNum, mapGroup, priority + 83);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_resetobjectpriority(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
sub_808E7E4(localId, mapNum, mapGroup);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_faceplayer(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
if (gMapObjects[gSelectedMapObject].active)
|
|
|
|
{
|
|
|
|
FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject],
|
|
|
|
player_get_direction_lower_nybble());
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_turnobject(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 direction = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
FieldObjectTurnByLocalIdAndMap(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, direction);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 localId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 movementType = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
Overworld_SetMapObjTemplateMovementType(localId, movementType);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_createvobject(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 graphicsId = ScriptReadByte(ctx);
|
|
|
|
u8 v2 = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u32 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 elevation = ScriptReadByte(ctx);
|
|
|
|
u8 direction = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
sprite_new(graphicsId, v2, x, y, elevation, direction);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 v1 = ScriptReadByte(ctx);
|
|
|
|
u8 direction = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
sub_8097B78(v1, direction);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_lockall(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
if (is_c1_link_related_active())
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ScriptFreezeMapObjects();
|
|
|
|
SetupNativeScript(ctx, sub_80983C4);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_lock(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
if (is_c1_link_related_active())
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (gMapObjects[gSelectedMapObject].active)
|
|
|
|
{
|
|
|
|
LockSelectedMapObject();
|
|
|
|
SetupNativeScript(ctx, sub_809847C);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ScriptFreezeMapObjects();
|
|
|
|
SetupNativeScript(ctx, sub_80983C4);
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 objectId;
|
|
|
|
|
|
|
|
HideFieldMessageBox();
|
|
|
|
objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0);
|
|
|
|
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]);
|
|
|
|
sub_80D338C();
|
|
|
|
UnfreezeMapObjects();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_release(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 objectId;
|
|
|
|
|
|
|
|
HideFieldMessageBox();
|
|
|
|
if (gMapObjects[gSelectedMapObject].active)
|
|
|
|
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedMapObject]);
|
|
|
|
objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0);
|
|
|
|
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]);
|
|
|
|
sub_80D338C();
|
|
|
|
UnfreezeMapObjects();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_message(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *msg = (const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (msg == NULL)
|
2017-10-12 21:36:26 +02:00
|
|
|
msg = (const u8 *)ctx->data[0];
|
2017-10-12 09:06:19 +02:00
|
|
|
ShowFieldMessage(msg);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdDF(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *msg = (const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (msg == NULL)
|
2017-10-12 21:36:26 +02:00
|
|
|
msg = (const u8 *)ctx->data[0];
|
2017-10-12 09:06:19 +02:00
|
|
|
sub_8098238(msg);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_messageautoscroll(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *msg = (const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (msg == NULL)
|
2017-10-12 21:36:26 +02:00
|
|
|
msg = (const u8 *)ctx->data[0];
|
2017-10-12 09:06:19 +02:00
|
|
|
gTextFlags.flag_2 = TRUE;
|
|
|
|
gTextFlags.flag_3 = TRUE;
|
|
|
|
ShowFieldAutoScrollMessage(msg);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdDB(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *msg = (const u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (msg == NULL)
|
2017-10-12 21:36:26 +02:00
|
|
|
msg = (const u8 *)ctx->data[0];
|
2017-10-12 09:06:19 +02:00
|
|
|
sub_81973A4();
|
|
|
|
sub_81973C4(0, 1);
|
|
|
|
PrintTextOnWindow(0, 1, msg, 0, 1, 0, 0);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitmessage(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
SetupNativeScript(ctx, IsFieldMessageBoxHidden);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_closemessage(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
HideFieldMessageBox();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool8 WaitForAorBPress(void)
|
|
|
|
{
|
|
|
|
if (gMain.newKeys & A_BUTTON)
|
|
|
|
return TRUE;
|
|
|
|
if (gMain.newKeys & B_BUTTON)
|
|
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitbutton(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
SetupNativeScript(ctx, WaitForAorBPress);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_yesnobox(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 left = ScriptReadByte(ctx);
|
|
|
|
u8 top = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (ScriptMenu_YesNo(left, top) == TRUE)
|
|
|
|
{
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_multichoice(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 left = ScriptReadByte(ctx);
|
|
|
|
u8 top = ScriptReadByte(ctx);
|
|
|
|
u8 multichoiceId = ScriptReadByte(ctx);
|
|
|
|
u8 ignoreBPress = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (ScriptMenu_Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
|
|
|
|
{
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_multichoicedefault(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 left = ScriptReadByte(ctx);
|
|
|
|
u8 top = ScriptReadByte(ctx);
|
|
|
|
u8 multichoiceId = ScriptReadByte(ctx);
|
|
|
|
u8 defaultChoice = ScriptReadByte(ctx);
|
|
|
|
u8 ignoreBPress = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (ScriptMenu_MultichoiceWithDefault(left, top, multichoiceId, ignoreBPress, defaultChoice) == TRUE)
|
|
|
|
{
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmd72(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
/*u8 left = ScriptReadByte(ctx);
|
|
|
|
u8 top = ScriptReadByte(ctx);
|
|
|
|
u8 right = ScriptReadByte(ctx);
|
|
|
|
u8 bottom = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
MenuDrawTextWindow(left, top, right, bottom);*/
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_multichoicegrid(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 left = ScriptReadByte(ctx);
|
|
|
|
u8 top = ScriptReadByte(ctx);
|
|
|
|
u8 multichoiceId = ScriptReadByte(ctx);
|
|
|
|
u8 numColumns = ScriptReadByte(ctx);
|
|
|
|
u8 ignoreBPress = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (ScriptMenu_MultichoiceGrid(left, top, multichoiceId, ignoreBPress, numColumns) == TRUE)
|
|
|
|
{
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmd73(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 left = ScriptReadByte(ctx);
|
|
|
|
u8 top = ScriptReadByte(ctx);
|
|
|
|
u8 right = ScriptReadByte(ctx);
|
|
|
|
u8 bottom = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
// MenuZeroFillWindowRect(left, top, right, bottom);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmd74(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 left = ScriptReadByte(ctx);
|
|
|
|
u8 top = ScriptReadByte(ctx);
|
|
|
|
u8 multichoiceId = ScriptReadByte(ctx);
|
|
|
|
u8 ignoreBPress = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
/*if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
|
|
|
|
{
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}*/
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_drawpokepic(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 species = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 x = ScriptReadByte(ctx);
|
|
|
|
u8 y = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
ScriptMenu_ShowPokemonPic(species, x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_erasepokepic(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc();
|
|
|
|
|
|
|
|
if (func == NULL)
|
|
|
|
return FALSE;
|
|
|
|
SetupNativeScript(ctx, func);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_drawcontestwinner(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 v1 = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (v1)
|
|
|
|
sub_812FDA8(v1);
|
|
|
|
ShowContestWinner();
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Temporary, will come back to this later.
|
|
|
|
/*bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 *ptr = (u8 *)ScriptReadWord(ctx);
|
|
|
|
u8 *localStringVar4;
|
|
|
|
u8 width;
|
|
|
|
u8 height;
|
|
|
|
u8 temp;
|
|
|
|
|
|
|
|
StringExpandPlaceholders(gStringVar4, ptr);
|
|
|
|
|
|
|
|
width = GetStringWidth(6, gStringVar4, -1) / 8;
|
|
|
|
|
|
|
|
if (width > 0x1C)
|
|
|
|
width = 0x1C;
|
|
|
|
|
|
|
|
height = 4;
|
|
|
|
localStringVar4 = gStringVar4;
|
|
|
|
temp = width + 2;
|
|
|
|
|
|
|
|
for (; *localStringVar4 != 0xFF; localStringVar4++)
|
|
|
|
{
|
|
|
|
if (*localStringVar4 == 0xFE)
|
|
|
|
height += 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (height > 0x12)
|
|
|
|
height = 0x12;
|
|
|
|
|
|
|
|
temp = 0x1E - temp;
|
|
|
|
|
|
|
|
u8 v2 = ptr[0];
|
|
|
|
u8 v3 = ptr[1];
|
|
|
|
u8 v4 = ptr[2];
|
|
|
|
u8 v5 = ptr[3];
|
|
|
|
u8 v6 = ptr[4];
|
|
|
|
u8 v7 = ptr[5];
|
|
|
|
StringBraille(gStringVar4, ptr + 6);
|
|
|
|
MenuDrawTextWindow(v2, v3, v4, v5);
|
|
|
|
MenuPrint(gStringVar4, v6, v7);
|
|
|
|
return FALSE;
|
|
|
|
}*/
|
|
|
|
__attribute__((naked))
|
|
|
|
bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
asm("push {r4-r7,lr}\n\
|
|
|
|
mov r7, r8\n\
|
|
|
|
push {r7}\n\
|
|
|
|
sub sp, #0x20\n\
|
|
|
|
bl ScriptReadWord\n\
|
|
|
|
add r1, r0, #0\n\
|
|
|
|
ldr r4, =gStringVar4\n\
|
|
|
|
add r1, #0x6\n\
|
|
|
|
add r0, r4, #0\n\
|
|
|
|
bl StringExpandPlaceholders\n\
|
|
|
|
mov r2, #0x1\n\
|
|
|
|
neg r2, r2\n\
|
|
|
|
mov r0, #0x6\n\
|
|
|
|
add r1, r4, #0\n\
|
|
|
|
bl GetStringWidth\n\
|
|
|
|
lsr r0, #3\n\
|
|
|
|
lsl r0, #24\n\
|
|
|
|
lsr r7, r0, #24\n\
|
|
|
|
cmp r7, #0x1C\n\
|
|
|
|
bls _0809AE9C\n\
|
|
|
|
mov r7, #0x1C\n\
|
|
|
|
_0809AE9C:\n\
|
|
|
|
mov r5, #0x4\n\
|
|
|
|
ldrb r0, [r4]\n\
|
|
|
|
add r2, r7, #0x2\n\
|
|
|
|
add r1, sp, #0x18\n\
|
|
|
|
mov r8, r1\n\
|
|
|
|
cmp r0, #0xFF\n\
|
|
|
|
beq _0809AEC0\n\
|
|
|
|
add r1, r4, #0\n\
|
|
|
|
_0809AEAC:\n\
|
|
|
|
ldrb r0, [r1]\n\
|
|
|
|
add r1, #0x1\n\
|
|
|
|
cmp r0, #0xFE\n\
|
|
|
|
bne _0809AEBA\n\
|
|
|
|
add r0, r5, #0x3\n\
|
|
|
|
lsl r0, #24\n\
|
|
|
|
lsr r5, r0, #24\n\
|
|
|
|
_0809AEBA:\n\
|
|
|
|
ldrb r0, [r1]\n\
|
|
|
|
cmp r0, #0xFF\n\
|
|
|
|
bne _0809AEAC\n\
|
|
|
|
_0809AEC0:\n\
|
|
|
|
cmp r5, #0x12\n\
|
|
|
|
bls _0809AEC6\n\
|
|
|
|
mov r5, #0x12\n\
|
|
|
|
_0809AEC6:\n\
|
|
|
|
lsl r0, r2, #24\n\
|
|
|
|
lsr r0, #24\n\
|
|
|
|
mov r2, #0x1E\n\
|
|
|
|
sub r2, r0\n\
|
|
|
|
lsr r0, r2, #31\n\
|
|
|
|
add r2, r0\n\
|
|
|
|
asr r2, #1\n\
|
|
|
|
lsl r2, #24\n\
|
|
|
|
add r0, r5, #0x2\n\
|
|
|
|
lsl r0, #24\n\
|
|
|
|
lsr r0, #24\n\
|
|
|
|
mov r4, #0x14\n\
|
|
|
|
sub r4, r0\n\
|
|
|
|
lsr r0, r4, #31\n\
|
|
|
|
add r4, r0\n\
|
|
|
|
asr r4, #1\n\
|
|
|
|
lsl r4, #24\n\
|
|
|
|
lsr r6, r2, #24\n\
|
|
|
|
mov r0, #0x80\n\
|
|
|
|
lsl r0, #17\n\
|
|
|
|
add r2, r0\n\
|
|
|
|
lsr r2, #24\n\
|
|
|
|
lsr r3, r4, #24\n\
|
|
|
|
mov r1, #0x80\n\
|
|
|
|
lsl r1, #18\n\
|
|
|
|
add r4, r1\n\
|
|
|
|
lsr r4, #24\n\
|
|
|
|
sub r6, r2, r6\n\
|
|
|
|
sub r6, #0x1\n\
|
|
|
|
lsl r6, #3\n\
|
|
|
|
add r6, #0x3\n\
|
|
|
|
lsl r6, #24\n\
|
|
|
|
lsr r6, #24\n\
|
|
|
|
sub r4, r3\n\
|
|
|
|
sub r4, #0x1\n\
|
|
|
|
lsl r4, #27\n\
|
|
|
|
lsr r4, #24\n\
|
|
|
|
add r3, #0x1\n\
|
|
|
|
lsl r3, #24\n\
|
|
|
|
lsr r3, #24\n\
|
|
|
|
str r7, [sp]\n\
|
|
|
|
str r5, [sp, #0x4]\n\
|
|
|
|
mov r0, #0xF\n\
|
|
|
|
str r0, [sp, #0x8]\n\
|
|
|
|
mov r0, #0x1\n\
|
|
|
|
str r0, [sp, #0xC]\n\
|
|
|
|
add r0, sp, #0x10\n\
|
|
|
|
mov r1, #0\n\
|
|
|
|
bl sub_8198A50\n\
|
|
|
|
ldr r0, [sp, #0x10]\n\
|
|
|
|
ldr r1, [sp, #0x14]\n\
|
|
|
|
str r0, [sp, #0x18]\n\
|
|
|
|
str r1, [sp, #0x1C]\n\
|
|
|
|
ldr r5, =gUnknown_03000F30\n\
|
|
|
|
mov r0, r8\n\
|
|
|
|
bl AddWindow\n\
|
|
|
|
strb r0, [r5]\n\
|
|
|
|
ldrb r0, [r5]\n\
|
|
|
|
mov r1, #0x85\n\
|
|
|
|
lsl r1, #2\n\
|
|
|
|
mov r2, #0xE0\n\
|
|
|
|
bl sub_809882C\n\
|
|
|
|
ldrb r0, [r5]\n\
|
|
|
|
mov r1, #0\n\
|
|
|
|
bl sub_81973FC\n\
|
|
|
|
ldrb r0, [r5]\n\
|
|
|
|
bl PutWindowTilemap\n\
|
|
|
|
ldrb r0, [r5]\n\
|
|
|
|
mov r1, #0x11\n\
|
|
|
|
bl FillWindowPixelBuffer\n\
|
|
|
|
ldrb r0, [r5]\n\
|
|
|
|
ldr r2, =gStringVar4\n\
|
|
|
|
str r4, [sp]\n\
|
|
|
|
mov r1, #0xFF\n\
|
|
|
|
str r1, [sp, #0x4]\n\
|
|
|
|
mov r1, #0\n\
|
|
|
|
str r1, [sp, #0x8]\n\
|
|
|
|
mov r1, #0x6\n\
|
|
|
|
add r3, r6, #0\n\
|
|
|
|
bl PrintTextOnWindow\n\
|
|
|
|
ldrb r0, [r5]\n\
|
|
|
|
mov r1, #0x3\n\
|
|
|
|
bl CopyWindowToVram\n\
|
|
|
|
mov r0, #0\n\
|
|
|
|
add sp, #0x20\n\
|
|
|
|
pop {r3}\n\
|
|
|
|
mov r8, r3\n\
|
|
|
|
pop {r4-r7}\n\
|
|
|
|
pop {r1}\n\
|
|
|
|
bx r1\n\
|
|
|
|
.pool");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdDA(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_809BDB4();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_vmessage(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 v1 = ScriptReadWord(ctx);
|
|
|
|
|
|
|
|
ShowFieldMessage((u8 *)(v1 - gUnknown_020375C4));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getspeciesname(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 species = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
StringCopy(sScriptStringVars[stringVarIndex], gSpeciesNames[species]);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getfirstpartypokename(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
u8 *dest = sScriptStringVars[stringVarIndex];
|
|
|
|
u8 partyIndex = GetLeadMonIndex();
|
|
|
|
u32 species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES, NULL);
|
|
|
|
StringCopy(dest, gSpeciesNames[species]);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getpartypokename(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 partyIndex = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]);
|
|
|
|
StringGetEnd10(sScriptStringVars[stringVarIndex]);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getitemname(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
CopyItemName(itemId, sScriptStringVars[stringVarIndex]);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdE2(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 itemId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 quantity = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
CopyItemNameHandlePlural(itemId, sScriptStringVars[stringVarIndex], quantity);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getdecorname(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 decorId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
StringCopy(sScriptStringVars[stringVarIndex], gDecorations[decorId].name);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getmovename(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 moveId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
StringCopy(sScriptStringVars[stringVarIndex], gMoveNames[moveId]);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getnumberstring(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 v1 = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 v2 = sub_80EF370(v1);
|
|
|
|
|
|
|
|
ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getstdstring(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 index = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
StringCopy(sScriptStringVars[stringVarIndex], gUnknown_0858BAF0[index]);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdE1(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 index = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sub_818E868(sScriptStringVars[stringVarIndex], index);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getstring(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *text = (u8 *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
StringCopy(sScriptStringVars[stringVarIndex], text);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_vloadword(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *ptr = (u8 *)(ScriptReadWord(ctx) - gUnknown_020375C4);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
StringExpandPlaceholders(gStringVar4, ptr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_vgetstring(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u32 addr = ScriptReadWord(ctx);
|
|
|
|
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8 *src = (u8 *)(addr - gUnknown_020375C4);
|
2017-10-12 09:06:19 +02:00
|
|
|
u8 *dest = sScriptStringVars[stringVarIndex];
|
|
|
|
StringCopy(dest, src);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdC6(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 boxId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
StringCopy(sScriptStringVars[stringVarIndex], GetBoxNamePtr(boxId));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_givepoke(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 species = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 level = ScriptReadByte(ctx);
|
|
|
|
u16 item = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u32 unkParam1 = ScriptReadWord(ctx);
|
|
|
|
u32 unkParam2 = ScriptReadWord(ctx);
|
|
|
|
u8 unkParam3 = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
gScriptResult = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_giveegg(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 species = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = ScriptGiveEgg(species);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setpokemove(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 partyIndex = ScriptReadByte(ctx);
|
|
|
|
u8 slot = ScriptReadByte(ctx);
|
|
|
|
u16 move = ScriptReadHalfword(ctx);
|
|
|
|
|
|
|
|
ScriptSetMonMoveSlot(partyIndex, move, slot);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkpokemove(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 i;
|
|
|
|
u16 moveId = ScriptReadHalfword(ctx);
|
|
|
|
|
|
|
|
gScriptResult = 6;
|
|
|
|
for (i = 0; i < 6; i++)
|
|
|
|
{
|
|
|
|
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL);
|
|
|
|
if (!species)
|
|
|
|
break;
|
|
|
|
// UB: GetMonData() arguments don't match function definition
|
|
|
|
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) && pokemon_has_move(&gPlayerParty[i], moveId) == TRUE)
|
|
|
|
{
|
|
|
|
gScriptResult = i;
|
|
|
|
gSpecialVar_0x8004 = species;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_givemoney(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 amount = ScriptReadWord(ctx);
|
|
|
|
u8 ignore = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (!ignore)
|
|
|
|
AddMoney(&gSaveBlock1Ptr->money, amount);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_takemoney(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 amount = ScriptReadWord(ctx);
|
|
|
|
u8 ignore = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (!ignore)
|
|
|
|
RemoveMoney(&gSaveBlock1Ptr->money, amount);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkmoney(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u32 amount = ScriptReadWord(ctx);
|
|
|
|
u8 ignore = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (!ignore)
|
|
|
|
gScriptResult = IsEnoughMoney(&gSaveBlock1Ptr->money, amount);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_showmoneybox(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 x = ScriptReadByte(ctx);
|
|
|
|
u8 y = ScriptReadByte(ctx);
|
|
|
|
u8 ignore = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (!ignore)
|
|
|
|
DrawMoneyBox(GetMoney(&gSaveBlock1Ptr->money), x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_hidemoneybox(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
/*u8 x = ScriptReadByte(ctx);
|
|
|
|
u8 y = ScriptReadByte(ctx);*/
|
|
|
|
|
|
|
|
HideMoneyBox();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_updatemoneybox(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 x = ScriptReadByte(ctx);
|
|
|
|
u8 y = ScriptReadByte(ctx);
|
|
|
|
u8 ignore = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (!ignore)
|
|
|
|
ChangeAmountInMoneyBox(GetMoney(&gSaveBlock1Ptr->money));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_showcoinsbox(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 x = ScriptReadByte(ctx);
|
|
|
|
u8 y = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
ShowCoinsWindow(GetCoins(), x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_hidecoinsbox(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 x = ScriptReadByte(ctx);
|
|
|
|
u8 y = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
HideCoinsWindow();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_updatecoinsbox(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 x = ScriptReadByte(ctx);
|
|
|
|
u8 y = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
PrintCoinsString(GetCoins());
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
ctx->scriptPtr = BattleSetup_ConfigureTrainerBattle(ctx->scriptPtr);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_battlebegin(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
BattleSetup_StartTrainerBattle();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_ontrainerbattleend(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_ontrainerbattleendgoto(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 index = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
ctx->comparisonResult = HasTrainerAlreadyBeenFought(index);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 index = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
trainer_flag_set(index);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cleartrainerflag(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 index = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
trainer_flag_clear(index);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 species = ScriptReadHalfword(ctx);
|
|
|
|
u8 level = ScriptReadByte(ctx);
|
|
|
|
u16 item = ScriptReadHalfword(ctx);
|
|
|
|
|
|
|
|
CreateScriptedWildMon(species, level, item);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
BattleSetup_StartScriptedWildBattle();
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_pokemart(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const void *ptr = (void *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
CreatePokemartMenu(ptr);
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_pokemartdecor(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const void *ptr = (void *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
CreateDecorationShop1Menu(ptr);
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_pokemartbp(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const void *ptr = (void *)ScriptReadWord(ctx);
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
CreateDecorationShop2Menu(ptr);
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 slotMachineIndex = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
PlaySlotMachine(slotMachineIndex, c2_exit_to_overworld_1_continue_scripts_restart_music);
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_plantberrytree(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 treeId = ScriptReadByte(ctx);
|
|
|
|
u8 berry = ScriptReadByte(ctx);
|
|
|
|
u8 growthStage = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (berry == 0)
|
|
|
|
PlantBerryTree(treeId, 0, growthStage, FALSE);
|
|
|
|
else
|
|
|
|
PlantBerryTree(treeId, berry, growthStage, FALSE);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 value = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = GetPriceReduction(value);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_choosecontestpkmn(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_81B9404();
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool8 ScrCmd_startcontest(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_80F840C();
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_showcontestresults(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_80F8484();
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_80F84C4(gScriptContestCategory);
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_dofieldeffect(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 effectId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sFieldEffectScriptId = effectId;
|
|
|
|
FieldEffectStart(sFieldEffectScriptId);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setfieldeffect(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 argNum = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
gFieldEffectArguments[argNum] = (s16)VarGet(ScriptReadHalfword(ctx));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool8 WaitForFieldEffectFinish(void)
|
|
|
|
{
|
|
|
|
if (!FieldEffectActiveListContains(sFieldEffectScriptId))
|
|
|
|
return TRUE;
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitfieldeffect(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sFieldEffectScriptId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
SetupNativeScript(ctx, WaitForFieldEffectFinish);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_sethealplace(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 healLocationId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetHealLocationWarp(healLocationId);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkplayergender(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
gScriptResult = gSaveBlock2Ptr->playerGender;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_playpokecry(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 species = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 mode = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
PlayCry5(species, mode);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitpokecry(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
SetupNativeScript(ctx, IsCryFinished);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setmaptile(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 tileId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 v8 = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
x += 7;
|
|
|
|
y += 7;
|
|
|
|
if (!v8)
|
|
|
|
MapGridSetMetatileIdAt(x, y, tileId);
|
|
|
|
else
|
|
|
|
MapGridSetMetatileIdAt(x, y, tileId | 0xC00);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_opendoor(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
x += 7;
|
|
|
|
y += 7;
|
|
|
|
PlaySE(GetDoorSoundEffect(x, y));
|
|
|
|
FieldAnimateDoorOpen(x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_closedoor(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
x += 7;
|
|
|
|
y += 7;
|
|
|
|
FieldAnimateDoorClose(x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool8 IsDoorAnimationStopped(void)
|
|
|
|
{
|
|
|
|
if (!FieldIsDoorAnimationRunning())
|
|
|
|
return TRUE;
|
|
|
|
else
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_waitdooranim(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
SetupNativeScript(ctx, IsDoorAnimationStopped);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setdooropen(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
x += 7;
|
|
|
|
y += 7;
|
|
|
|
FieldSetDoorOpened(x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_setdoorclosed(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
x += 7;
|
|
|
|
y += 7;
|
|
|
|
FieldSetDoorClosed(x, y);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdB1(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 v3 = ScriptReadByte(ctx);
|
|
|
|
u16 v5 = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 v7 = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 v9 = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
//ScriptAddElevatorMenuItem(v3, v5, v7, v9);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdB2(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
/*ScriptShowElevatorMenu();
|
|
|
|
ScriptContext1_Stop();
|
|
|
|
return TRUE;*/
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_checkcoins(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx));
|
|
|
|
*ptr = GetCoins();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_givecoins(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 coins = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
if (GiveCoins(coins) == TRUE)
|
|
|
|
gScriptResult = 0;
|
|
|
|
else
|
|
|
|
gScriptResult = 1;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_takecoins(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 coins = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
if (TakeCoins(coins) == TRUE)
|
|
|
|
gScriptResult = 0;
|
|
|
|
else
|
|
|
|
gScriptResult = 1;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD3(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 v1 = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sMovingNpcId = sub_81A89A0(v1);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD4(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_81A8AF8();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD5(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 v1 = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
sub_81A8934(v1);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD6(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
sub_81A895C();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD8(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
gSelectedMapObject = sub_80B47BC();
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD9(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
if (is_c1_link_related_active())
|
|
|
|
{
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (gMapObjects[gSelectedMapObject].active)
|
|
|
|
{
|
|
|
|
sub_8098630();
|
|
|
|
SetupNativeScript(ctx, sub_8098734);
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdCD(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
bool8 obedient = TRUE;
|
|
|
|
u16 partyIndex = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
SetMonData(&gPlayerParty[partyIndex], MON_DATA_OBEDIENCE, &obedient);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdCE(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 partyIndex = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
gScriptResult = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OBEDIENCE, NULL);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdCF(struct ScriptContext *ctx)
|
|
|
|
{
|
2017-10-12 21:36:26 +02:00
|
|
|
const u8* v1 = sub_8099244();
|
2017-10-12 09:06:19 +02:00
|
|
|
|
|
|
|
if (v1)
|
|
|
|
{
|
|
|
|
((u8*)gUnknown_020375C0) = ctx->scriptPtr;
|
|
|
|
ScriptJump(ctx, v1);
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD1(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
|
|
|
sub_808D074(player_get_direction_lower_nybble());
|
|
|
|
sub_80B0244();
|
|
|
|
player_avatar_init_params_reset();
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdD2(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u16 partyIndex = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u8 location = ScriptReadByte(ctx);
|
|
|
|
|
|
|
|
if (partyIndex < PARTY_SIZE)
|
|
|
|
SetMonData(&gPlayerParty[partyIndex], MON_DATA_MET_LOCATION, &location);
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_809BDB4(void)
|
|
|
|
{
|
|
|
|
sub_819746C(gUnknown_03000F30, 1);
|
|
|
|
RemoveWindow(gUnknown_03000F30);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdDD(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 trainerClassId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
StringCopy(sScriptStringVars[stringVarIndex], GetTrainerClassNameFromId(trainerClassId));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 ScrCmd_cmdDE(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 stringVarIndex = ScriptReadByte(ctx);
|
|
|
|
u16 trainerClassId = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
|
|
|
|
StringCopy(sScriptStringVars[stringVarIndex], GetTrainerNameFromId(trainerClassId));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_809BE48(u16 npcId)
|
|
|
|
{
|
|
|
|
sMovingNpcId = npcId;
|
|
|
|
}
|
2017-10-01 03:19:29 +02:00
|
|
|
|
2017-10-12 09:06:19 +02:00
|
|
|
bool8 ScrCmd_cmdE0(struct ScriptContext *ctx)
|
|
|
|
{
|
|
|
|
u8 mapGroup = ScriptReadByte(ctx);
|
|
|
|
u8 mapNum = ScriptReadByte(ctx);
|
|
|
|
u8 warpId = ScriptReadByte(ctx);
|
|
|
|
u16 x = VarGet(ScriptReadHalfword(ctx));
|
|
|
|
u16 y = VarGet(ScriptReadHalfword(ctx));
|
2017-10-01 03:19:29 +02:00
|
|
|
|
2017-10-12 09:06:19 +02:00
|
|
|
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
|
|
|
sub_80AF79C();
|
|
|
|
player_avatar_init_params_reset();
|
|
|
|
return TRUE;
|
|
|
|
}
|