summaryrefslogtreecommitdiff
path: root/src/mystery_event_script.c
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-10-09 10:23:23 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-10-09 10:40:04 -0700
commit72beb410f423cafd35989c0b8dd4c52860cf80f8 (patch)
tree155aa1e2c39ebd504e095bc8c1dc218aad3acdc4 /src/mystery_event_script.c
parenta871ce87a74421df64a9ad381d37dc32ff9bdc6d (diff)
parent3e03d362fae398fa56c4a6e45d7b999772d0803f (diff)
Merge remote-tracking branch 'upstream/master' into party_menu
Diffstat (limited to 'src/mystery_event_script.c')
-rw-r--r--src/mystery_event_script.c462
1 files changed, 0 insertions, 462 deletions
diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c
deleted file mode 100644
index f507942a7..000000000
--- a/src/mystery_event_script.c
+++ /dev/null
@@ -1,462 +0,0 @@
-#include "global.h"
-#include "berry.h"
-#include "easy_chat.h"
-#include "event_data.h"
-#include "mail_data.h"
-#include "mystery_event_script.h"
-#include "pokedex.h"
-#include "pokemon.h"
-#include "pokemon_size_record.h"
-#include "script.h"
-#include "species.h"
-#include "strings.h"
-#include "string_util.h"
-#include "text.h"
-#include "util.h"
-
-#if ENGLISH
-#define LANGUAGE_MASK 0x2
-#elif GERMAN
-#define LANGUAGE_MASK 0x4
-#endif
-
-#ifdef SAPPHIRE
-#define VERSION_MASK 0x100
-#else
-#define VERSION_MASK 0x80
-#endif
-
-extern void party_compaction(void);
-extern void sub_813601C(void);
-
-extern ScrCmdFunc gMysteryEventScriptCmdTable[];
-extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[];
-
-extern const u8 gOtherText_BerryObtainedDadHasIt[];
-extern const u8 gOtherText_BerryTransformed[];
-extern const u8 gOtherText_BerryAlreadyObtained[];
-extern const u8 gOtherText_SpecialRibbonReceived[];
-extern const u8 gOtherText_DexUpgraded[];
-extern const u8 gOtherText_RareWordAdded[];
-extern const u8 gOtherText_PokeWasSentOver[];
-extern const u8 gOtherText_PartyIsFull[];
-extern const u8 gOtherText_NewTrainerInHoenn[];
-extern const u8 gOtherText_DataCannotUseVersion[];
-
-static EWRAM_DATA struct ScriptContext sMysteryEventScriptContext = {0};
-
-static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4)
-{
- if (!(a1 & LANGUAGE_MASK))
- return FALSE;
-
- if (!(a2 & LANGUAGE_MASK))
- return FALSE;
-
- if (!(a3 & 0x4))
- return FALSE;
-
- if (!(a4 & VERSION_MASK))
- return FALSE;
-
- return TRUE;
-}
-
-static void SetIncompatible(void)
-{
- StringExpandPlaceholders(gStringVar4, gOtherText_DataCannotUseVersion);
- SetMysteryEventScriptStatus(3);
-}
-
-static void InitMysteryEventScript(struct ScriptContext *ctx, u8 *script)
-{
- InitScriptContext(ctx, gMysteryEventScriptCmdTable, gMysteryEventScriptCmdTableEnd);
- SetupBytecodeScript(ctx, script);
- ctx->data[0] = (u32)script;
- ctx->data[1] = 0;
- ctx->data[2] = 0;
- ctx->data[3] = 0;
-}
-
-static bool32 RunMysteryEventScriptCommand(struct ScriptContext *ctx)
-{
- if (RunScriptCommand(ctx) && ctx->data[3])
- return TRUE;
- else
- return FALSE;
-}
-
-u32 RunMysteryEventScript(u8 *script)
-{
- struct ScriptContext *ctx = &sMysteryEventScriptContext;
- InitMysteryEventScript(ctx, script);
- while (RunMysteryEventScriptCommand(ctx))
- ;
- return ctx->data[2];
-}
-
-void SetMysteryEventScriptStatus(u32 val)
-{
- sMysteryEventScriptContext.data[2] = val;
-}
-
-static int CalcChecksum(u8 *data, int size)
-{
- unsigned int i;
- int sum = 0;
-
- for (i = 0; i < size; i++)
- sum += data[i];
-
- return sum;
-}
-
-static u32 GetWord(u8 *ptr)
-{
- return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24);
-}
-
-static void SetWord(u8 *ptr, u32 val)
-{
- ptr[0] = val;
- ptr[1] = val >> 8;
- ptr[2] = val >> 16;
- ptr[3] = val >> 24;
-}
-
-bool8 unref_sub_81261B4(u8 *a1, int a2)
-{
- if (a1[0x0] == 1 && a1[0x11] == 15 && !GetWord(a1 + 0x12))
- {
- int v4 = GetWord(a1 + 0x16) - a2 + (int)a1;
- int v5 = GetWord(a1 + 0x1A);
- int v6 = CalcChecksum((u8*)v4, v5 - a2 + (int)a1 - v4);
- SetWord(a1 + 0x12, v6);
- return TRUE;
- }
-
- return FALSE;
-}
-
-bool8 unref_sub_812620C(u8 *a1, int a2)
-{
- if (a1[0x0] == 1 && a1[0x11] == 16 && !GetWord(a1 + 0x12))
- {
- int v4 = GetWord(a1 + 0x16) - a2 + (int)a1;
- int v5 = GetWord(a1 + 0x1A);
- int v6 = CalcCRC16((u8*)v4, v5 - a2 + (int)a1 - v4);
- SetWord(a1 + 0x12, v6);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static u32 CalcRecordMixingGiftChecksum(void)
-{
- u32 sum = 0;
- int i;
- char *data = (char *)&gSaveBlock1.recordMixingGift.data;
-
- for (i = 0; i < sizeof(gSaveBlock1.recordMixingGift.data); i++)
- {
- sum += data[i];
- }
-
- return sum;
-}
-
-static bool32 IsRecordMixingGiftValid(void)
-{
- struct RecordMixingGiftData *data = &gSaveBlock1.recordMixingGift.data;
-
- u32 checksum = CalcRecordMixingGiftChecksum();
-
- if (!data->unk0)
- return FALSE;
-
- if (!data->quantity)
- return FALSE;
-
- if (!data->itemId)
- return FALSE;
-
- if (checksum == 0)
- return FALSE;
-
- if (checksum == gSaveBlock1.recordMixingGift.checksum)
- return TRUE;
- else
- return FALSE;
-}
-
-static void ClearRecordMixingGift(void)
-{
- CpuFill16(0, &gSaveBlock1.recordMixingGift, sizeof(gSaveBlock1.recordMixingGift));
-}
-
-static void SetRecordMixingGift(u8 unk, u8 quantity, u16 itemId)
-{
- if (!unk || !quantity || !itemId)
- {
- ClearRecordMixingGift();
- }
- else
- {
- gSaveBlock1.recordMixingGift.data.unk0 = unk;
- gSaveBlock1.recordMixingGift.data.quantity = quantity;
- gSaveBlock1.recordMixingGift.data.itemId = itemId;
- gSaveBlock1.recordMixingGift.checksum = CalcRecordMixingGiftChecksum();
- }
-}
-
-u16 GetRecordMixingGift(void)
-{
- struct RecordMixingGiftData *data = &gSaveBlock1.recordMixingGift.data;
-
- if (!IsRecordMixingGiftValid())
- {
- ClearRecordMixingGift();
- return 0;
- }
- else
- {
- u16 itemId = data->itemId;
- data->quantity--;
- if (data->quantity == 0)
- ClearRecordMixingGift();
- else
- gSaveBlock1.recordMixingGift.checksum = CalcRecordMixingGiftChecksum();
- return itemId;
- }
-}
-
-bool8 MEScrCmd_end(struct ScriptContext *ctx)
-{
- StopScript(ctx);
- return TRUE;
-}
-
-bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx)
-{
- u16 v1;
- u32 v2;
- u16 v3;
- u32 v4;
-
- ctx->data[1] = ScriptReadWord(ctx);
- v1 = ScriptReadHalfword(ctx);
- v2 = ScriptReadWord(ctx);
- v3 = ScriptReadHalfword(ctx);
- v4 = ScriptReadWord(ctx);
-
- if (CheckCompatibility(v1, v2, v3, v4) == TRUE)
- ctx->data[3] = 1;
- else
- SetIncompatible();
-
- return TRUE;
-}
-
-bool8 MEScrCmd_nop(struct ScriptContext *ctx)
-{
- return FALSE;
-}
-
-bool8 MEScrCmd_setstatus(struct ScriptContext *ctx)
-{
- u8 value = ScriptReadByte(ctx);
- ctx->data[2] = value;
- return FALSE;
-}
-
-bool8 MEScrCmd_setmsg(struct ScriptContext *ctx)
-{
- u8 value = ScriptReadByte(ctx);
- u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- if (value == 255 || value == ctx->data[2])
- StringExpandPlaceholders(gStringVar4, str);
- return FALSE;
-}
-
-bool8 MEScrCmd_runscript(struct ScriptContext *ctx)
-{
- u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- ScriptContext2_RunNewScript(script);
- return FALSE;
-}
-
-bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx)
-{
- u8 *str;
- const u8 *message;
- bool32 haveBerry = IsEnigmaBerryValid();
- u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- StringCopyN(gStringVar1, gSaveBlock1.enigmaBerry.berry.name, 7);
- SetEnigmaBerry(berry);
- StringCopyN(gStringVar2, gSaveBlock1.enigmaBerry.berry.name, 7);
-
- if (!haveBerry)
- {
- str = gStringVar4;
- message = gOtherText_BerryObtainedDadHasIt;
- }
- else if (StringCompare(gStringVar1, gStringVar2))
- {
- str = gStringVar4;
- message = gOtherText_BerryTransformed;
- }
- else
- {
- str = gStringVar4;
- message = gOtherText_BerryAlreadyObtained;
- }
-
- StringExpandPlaceholders(str, message);
-
- ctx->data[2] = 2;
-
- if (IsEnigmaBerryValid() == TRUE)
- VarSet(0x402D, 1);
- else
- ctx->data[2] = 1;
-
- return FALSE;
-}
-
-bool8 MEScrCmd_giveribbon(struct ScriptContext *ctx)
-{
- u8 index = ScriptReadByte(ctx);
- u8 ribbonId = ScriptReadByte(ctx);
- GiveGiftRibbonToParty(index, ribbonId);
- StringExpandPlaceholders(gStringVar4, gOtherText_SpecialRibbonReceived);
- ctx->data[2] = 2;
- return FALSE;
-}
-
-bool8 MEScrCmd_initramscript(struct ScriptContext *ctx)
-{
- u8 mapGroup = ScriptReadByte(ctx);
- u8 mapNum = ScriptReadByte(ctx);
- u8 objectId = ScriptReadByte(ctx);
- u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- InitRamScript(script, scriptEnd - script, mapGroup, mapNum, objectId);
- return FALSE;
-}
-
-bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx)
-{
- EnableNationalPokedex();
- StringExpandPlaceholders(gStringVar4, gOtherText_DexUpgraded);
- ctx->data[2] = 2;
- return FALSE;
-}
-
-bool8 MEScrCmd_addrareword(struct ScriptContext *ctx)
-{
- sub_80EB890(ScriptReadByte(ctx));
- StringExpandPlaceholders(gStringVar4, gOtherText_RareWordAdded);
- ctx->data[2] = 2;
- return FALSE;
-}
-
-bool8 MEScrCmd_setrecordmixinggift(struct ScriptContext *ctx)
-{
- u8 unk = ScriptReadByte(ctx);
- u8 quantity = ScriptReadByte(ctx);
- u16 itemId = ScriptReadHalfword(ctx);
- SetRecordMixingGift(unk, quantity, itemId);
- return FALSE;
-}
-
-bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
-{
- struct MailStruct mail;
- struct Pokemon pokemon;
- u16 species;
- u16 heldItem;
- u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0];
- void *pokemonPtr = (void *)data;
- void *mailPtr = (void *)(data + sizeof(struct Pokemon));
-
- pokemon = *(struct Pokemon *)pokemonPtr;
- species = GetMonData(&pokemon, MON_DATA_SPECIES2);
-
- if (species == SPECIES_EGG)
- StringCopyN(gStringVar1, gSystemText_Egg, 11);
- else
- StringCopyN(gStringVar1, gSystemText_Pokemon2, 11);
-
- if (gPlayerPartyCount == 6)
- {
- StringExpandPlaceholders(gStringVar4, gOtherText_PartyIsFull);
- ctx->data[2] = 3;
- }
- else
- {
- memcpy(&gPlayerParty[5], pokemonPtr, sizeof(struct Pokemon));
- memcpy(&mail, mailPtr, sizeof(struct MailStruct));
-
- if (species != SPECIES_EGG)
- {
- u16 pokedexNum = SpeciesToNationalPokedexNum(species);
- GetNationalPokedexFlag(pokedexNum, 2);
- GetNationalPokedexFlag(pokedexNum, 3);
- }
-
- heldItem = GetMonData(&gPlayerParty[5], MON_DATA_HELD_ITEM);
- if (ItemIsMail(heldItem))
- GiveMailToMon2(&gPlayerParty[5], &mail);
- party_compaction();
- CalculatePlayerPartyCount();
- StringExpandPlaceholders(gStringVar4, gOtherText_PokeWasSentOver);
- ctx->data[2] = 2;
- }
-
- return FALSE;
-}
-
-bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx)
-{
- u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0];
- memcpy(gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer));
- sub_813601C();
- StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn);
- ctx->data[2] = 2;
- return FALSE;
-}
-
-bool8 MEScrCmd_enableresetrtc(struct ScriptContext *ctx)
-{
- EnableResetRTC();
- StringExpandPlaceholders(gStringVar4, gSystemText_ClockAdjustmentUsable);
- ctx->data[2] = 2;
- return FALSE;
-}
-
-bool8 MEScrCmd_checksum(struct ScriptContext *ctx)
-{
- int checksum = ScriptReadWord(ctx);
- u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- if (checksum != CalcChecksum(data, dataEnd - data))
- {
- ctx->data[3] = 0;
- ctx->data[2] = 1;
- }
- return TRUE;
-}
-
-bool8 MEScrCmd_crc(struct ScriptContext *ctx)
-{
- int crc = ScriptReadWord(ctx);
- u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
- if (crc != CalcCRC16(data, dataEnd - data))
- {
- ctx->data[3] = 0;
- ctx->data[2] = 1;
- }
- return TRUE;
-}