papermario/src/evt/fa4c0_len_3bf0.c

793 lines
24 KiB
C

#include "common.h"
#include "pause/pause_common.h"
#include "hud_element.h"
#include "world/partners.h"
ApiStatus PollMusicEvents(Evt* script, s32 isInitialCall);
extern MusicEvent* MusicEventList;
extern s32 D_802DB7D4; // unused?
extern Evt* RunningMusicEvents[10];
extern s32 RunningMusicEventIDs[10];
extern s32 D_802DB828[2]; // unused?
extern PopupMenu D_802DB830;
s32 MusicEventPollCount = 0;
static EvtScript EVS_MusicEventMonitor = {
EVT_CALL(PollMusicEvents)
EVT_RETURN
EVT_END
};
ApiStatus PollMusicEvents(Evt* script, s32 isInitialCall) {
MusicEventTrigger* list;
s32 musicEventID, scriptSelector;
u32 count;
s32 i;
bgm_poll_music_events(&list, &count);
for (i = 0; i < count; i++, list++) {
MusicEvent* cur = MusicEventList;
musicEventID = (*list & 0xFF0000) >> 0x10;
scriptSelector = *list & 0xFF;
while (cur->musicEventID != -1) {
if (cur->musicEventID == musicEventID) {
break;
}
cur++;
}
// @bug? can cur ever be NULL here?
// condition should probably be if (cur->musicEventID != -1)
if (cur != NULL) {
EvtScript* newSource = cur->scripts[scriptSelector];
if (RunningMusicEvents[musicEventID] != NULL) {
kill_script_by_ID(RunningMusicEventIDs[musicEventID]);
}
if (newSource != NULL) {
Evt* newEvt = start_script(newSource, 1, 0);
RunningMusicEvents[musicEventID] = newEvt;
RunningMusicEventIDs[musicEventID] = newEvt->id;
}
}
}
bgm_flush_music_events();
MusicEventPollCount++;
return ApiStatus_BLOCK;
}
ApiStatus RegisterMusicEvents(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 i;
// expects a list of MusicEvent, terminated by -1 0 0 0 0
MusicEventList = (MusicEvent*) evt_get_variable(script, *args++);
for (i = 0; i < ARRAY_COUNT(RunningMusicEvents); i++) {
RunningMusicEvents[i] = NULL;
RunningMusicEventIDs[i] = 0;
}
start_script(&EVS_MusicEventMonitor, EVT_PRIORITY_1, 0);
return ApiStatus_DONE2;
}
ApiStatus FadeOutMusic(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 musicPlayer = evt_get_variable(script, *args++);
s32 fadeTime = evt_get_variable(script, *args++);
if (bgm_set_song(musicPlayer, -1, 0, fadeTime, 8)) {
return ApiStatus_DONE2;
} else {
return ApiStatus_BLOCK;
}
}
ApiStatus SetMusicTrack(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 musicPlayer = evt_get_variable(script, *args++);
s32 songID = evt_get_variable(script, *args++);
s32 variation = evt_get_variable(script, *args++);
s16 volume = evt_get_variable(script, *args++);
if (bgm_set_song(musicPlayer, songID, variation, 500, volume)) {
return ApiStatus_DONE2;
} else {
return ApiStatus_BLOCK;
}
}
ApiStatus FadeInMusic(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 musicPlayer = evt_get_variable(script, *args++);
s32 songID = evt_get_variable(script, *args++);
s32 variation = evt_get_variable(script, *args++);
s32 fadeTime = evt_get_variable(script, *args++);
s16 fadeStartVolume = evt_get_variable(script, *args++);
s16 fadeEndVolume = evt_get_variable(script, *args++);
if (func_8014A964(musicPlayer, songID, variation, fadeTime, fadeStartVolume, fadeEndVolume)) {
return ApiStatus_DONE2;
} else {
return ApiStatus_BLOCK;
}
}
ApiStatus func_802D5EE0(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 playerIndex = evt_get_variable(script, *args++);
gMusicSettings[playerIndex].flags |= MUSIC_SETTINGS_FLAGS_2;
return ApiStatus_DONE2;
}
ApiStatus AdjustMusicProximityMix(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 playerIndex = evt_get_variable(script, *args++);
s32 mix = evt_get_variable(script, *args++);
s32 state = evt_get_variable(script, *args++);
bgm_adjust_proximity(playerIndex, mix, state);
return ApiStatus_DONE2;
}
ApiStatus SetMusicTrackVolumes(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s16 trackVolSet = evt_get_variable(script, *args++);
bgm_set_track_volumes(0, trackVolSet);
return ApiStatus_DONE2;
}
ApiStatus PopSong(Evt* script, s32 isInitialCall) {
bgm_pop_song();
return ApiStatus_DONE2;
}
ApiStatus PushSong(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 songID = evt_get_variable(script, *args++);
s32 variation = evt_get_variable(script, *args++);
bgm_push_song(songID, variation);
return ApiStatus_DONE2;
}
ApiStatus PopBattleSong(Evt* script, s32 isInitialCall) {
bgm_pop_battle_song();
return ApiStatus_DONE2;
}
ApiStatus PushBattleSong(Evt* script, s32 isInitialCall) {
bgm_push_battle_song();
return ApiStatus_DONE2;
}
ApiStatus SetBattleSong(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 songID = evt_get_variable(script, *args++);
s32 variation = evt_get_variable(script, *args++);
bgm_set_battle_song(songID, variation);
return ApiStatus_DONE2;
}
ApiStatus ClearAmbientSounds(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 time = evt_get_variable(script, *args++);
if (play_ambient_sounds(-1, time)) {
return ApiStatus_DONE2;
} else {
return ApiStatus_BLOCK;
}
}
ApiStatus PlayAmbientSounds(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 soundID = evt_get_variable(script, *args++);
if (play_ambient_sounds(soundID, 250)) {
return ApiStatus_DONE2;
} else {
return ApiStatus_BLOCK;
}
}
ApiStatus PlaySound(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 soundID = evt_get_variable(script, *args++);
sfx_play_sound(soundID);
return ApiStatus_DONE2;
}
ApiStatus PlaySoundWithVolume(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 soundID = evt_get_variable(script, *args++);
s32 volume = evt_get_variable(script, *args++);
sfx_play_sound_with_params(soundID, volume, 0, 0);
return ApiStatus_DONE2;
}
ApiStatus PlaySoundAt(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 soundID = evt_get_variable(script, *args++);
s32 value2 = evt_get_variable(script, *args++);
s32 x = evt_get_variable(script, *args++);
s32 y = evt_get_variable(script, *args++);
s32 z = evt_get_variable(script, *args++);
sfx_play_sound_at_position(soundID, value2, x, y, z);
return ApiStatus_DONE2;
}
ApiStatus StopSound(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 soundID = evt_get_variable(script, *args++);
sfx_stop_sound(soundID);
return ApiStatus_DONE2;
}
ApiStatus func_802D62E4(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 soundID = evt_get_variable(script, *args++);
func_80149A6C(soundID, TRUE);
return ApiStatus_DONE2;
}
ApiStatus UseDoorSounds(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
gCurrentDoorSoundsSet = evt_get_variable(script, *args++);
return ApiStatus_DONE2;
}
ApiStatus UseAdvancedDoorSounds(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
D_80151308 = evt_get_variable(script, *args++);
return ApiStatus_DONE2;
}
ApiStatus PlaySoundAtF(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
Bytecode soundID = *args++;
u16 spatializationFlags = evt_get_variable(script, *args++);
f32 x = evt_get_float_variable(script, *args++);
f32 y = evt_get_float_variable(script, *args++);
f32 z = evt_get_float_variable(script, *args++);
sfx_play_sound_at_position(soundID, spatializationFlags, x, y, z);
return ApiStatus_DONE2;
}
ApiStatus ShowKeyChoicePopup(Evt* script, s32 isInitialCall) {
PlayerData* playerData = &gPlayerData;
PopupMenu* menu = &D_802DB830;
Trigger* trigger = script->owner2.trigger;
s32 numEntries;
s32 t; // TODO required in both places to match
s32 i;
if (isInitialCall) {
script->functionTemp[0] = 0;
}
t = script->functionTemp[0];
switch (t) {
case 0:
disable_player_input();
disable_player_static_collisions();
partner_disable_input();
close_status_menu();
numEntries = 0;
gOverrideFlags |= GLOBAL_OVERRIDES_40;
for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) {
s16 invItem = playerData->keyItems[i];
if (invItem != ITEM_NONE) {
s32 found = FALSE;
s32* itemIt = trigger->itemList;
while (*itemIt > 0) {
if (invItem == *itemIt) {
found = TRUE;
break;
}
itemIt++;
}
if (found) {
ItemData* item = &gItemTable[playerData->keyItems[i]];
menu->ptrIcon[numEntries] = gItemHudScripts[item->hudElemID].enabled;
menu->userIndex[numEntries] = i;
menu->enabled[numEntries] = TRUE;
menu->nameMsg[numEntries] = item->nameMsg;
menu->descMsg[numEntries] = item->shortDescMsg;
numEntries++;
}
}
}
if (numEntries == 0) {
script->varTable[0] = 0;
return ApiStatus_DONE1;
}
menu->popupType = POPUP_MENU_USEKEY;
menu->numEntries = numEntries;
menu->initialPos = 0;
create_popup_menu(menu);
script->functionTemp[1] = 0;
script->functionTemp[0] = 1;
break;
case 1:
if (script->functionTemp[1] == 0) {
script->functionTemp[2] = menu->result;
if (script->functionTemp[2] == 0) {
break;
}
hide_popup_menu();
}
script->functionTemp[1]++;
if (script->functionTemp[1] >= 15) {
destroy_popup_menu();
if (script->functionTemp[2] == 0xFF) {
script->varTable[0] = -1;
return ApiStatus_DONE1;
} else {
t = menu->userIndex[script->functionTemp[2] - 1];
script->varTable[1] = t;
script->varTable[0] = playerData->keyItems[t];
return ApiStatus_DONE1;
}
}
break;
}
return ApiStatus_BLOCK;
}
ApiStatus ShowConsumableChoicePopup(Evt* script, s32 isInitialCall) {
PlayerData* playerData = &gPlayerData;
PopupMenu* menu = &D_802DB830;
Trigger* trigger = script->owner2.trigger;
s32 numEntries;
s32 t; // TODO required in both places to match
s32 i;
if (isInitialCall) {
script->functionTemp[0] = 0;
}
t = script->functionTemp[0];
switch (t) {
case 0:
disable_player_input();
disable_player_static_collisions();
partner_disable_input();
close_status_menu();
numEntries = 0;
gOverrideFlags |= GLOBAL_OVERRIDES_40;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
s16 invItem = playerData->invItems[i];
if (invItem != ITEM_NONE) {
s32 found = FALSE;
s32* itemIt = trigger->itemList;
while (*itemIt > 0) {
if (invItem == *itemIt) {
found = TRUE;
break;
}
itemIt++;
}
if (found) {
ItemData* item = &gItemTable[playerData->invItems[i]];
menu->ptrIcon[numEntries] = gItemHudScripts[item->hudElemID].enabled;
menu->userIndex[numEntries] = i;
menu->enabled[numEntries] = TRUE;
menu->nameMsg[numEntries] = item->nameMsg;
menu->descMsg[numEntries] = item->shortDescMsg;
numEntries++;
}
}
}
if (numEntries == 0) {
script->varTable[0] = 0;
return ApiStatus_DONE1;
}
menu->popupType = POPUP_MENU_USEKEY;
menu->numEntries = numEntries;
menu->initialPos = 0;
create_popup_menu(menu);
script->functionTemp[1] = 0;
script->functionTemp[0] = 1;
break;
case 1:
if (script->functionTemp[1] == 0) {
script->functionTemp[2] = menu->result;
if (script->functionTemp[2] == 0) {
break;
}
hide_popup_menu();
}
script->functionTemp[1]++;
if (script->functionTemp[1] >= 15) {
destroy_popup_menu();
if (script->functionTemp[2] == 0xFF) {
script->varTable[0] = -1;
return ApiStatus_DONE1;
} else {
t = menu->userIndex[script->functionTemp[2] - 1];
script->varTable[1] = t;
script->varTable[0] = playerData->invItems[t];
return ApiStatus_DONE1;
}
}
break;
}
return ApiStatus_BLOCK;
}
ApiStatus RemoveKeyItemAt(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 index = evt_get_variable(script, *args++);
s16* ptrKeyItems = gPlayerData.keyItems;
ptrKeyItems[index] = ITEM_NONE;
return ApiStatus_DONE2;
}
ApiStatus RemoveItemAt(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 index = evt_get_variable(script, *args++);
s16* ptrInvItems = gPlayerData.invItems;
ptrInvItems[index] = ITEM_NONE;
sort_items();
return ApiStatus_DONE2;
}
ApiStatus AddKeyItem(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 value = *args++;
PlayerData* playerData = &gPlayerData;
s32 itemID = evt_get_variable(script, value);
s32 i;
if (itemID == ITEM_KOOPA_FORTRESS_KEY) {
playerData->fortressKeyCount++;
return ApiStatus_DONE2;
}
for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) {
if (playerData->keyItems[i] == ITEM_NONE) {
break;
}
}
if (i < ARRAY_COUNT(playerData->keyItems)) {
playerData->keyItems[i] = itemID;
}
return ApiStatus_DONE2;
}
ApiStatus CloseChoicePopup(Evt* script, s32 isInitialCall) {
enable_player_input();
enable_player_static_collisions();
partner_enable_input();
gOverrideFlags &= ~GLOBAL_OVERRIDES_40;
return ApiStatus_DONE2;
}
ApiStatus HasKeyItem(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
s32 value = *args++;
PlayerData* playerData = &gPlayerData;
s32 i;
for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) {
if (playerData->keyItems[i] == itemID) {
break;
}
}
evt_set_variable(script, value, i < ARRAY_COUNT(playerData->keyItems));
return ApiStatus_DONE2;
}
ApiStatus FindKeyItem(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
s32 value = *args++;
PlayerData* playerData = &gPlayerData;
s32 i;
s32 itemIndex;
for (i = 0; i < ARRAY_COUNT(playerData->keyItems); i++) {
if (playerData->keyItems[i] == itemID) {
break;
}
}
itemIndex = -1;
if (i != ARRAY_COUNT(playerData->keyItems)) {
itemIndex = i;
}
evt_set_variable(script, value, itemIndex);
return ApiStatus_DONE2;
}
ApiStatus AddItem(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
Bytecode outItemIdx = *args++;
evt_set_variable(script, outItemIdx, add_item(itemID));
return ApiStatus_DONE2;
}
ApiStatus ClearVariable(Evt* script, s32 isInitialCall) {
evt_set_variable(script, *script->ptrReadPos, 0);
return ApiStatus_DONE2;
}
ApiStatus FindItem(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
s32 value = *args++;
PlayerData* playerData = &gPlayerData;
s32 i;
s32 itemIndex;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
if (playerData->invItems[i] == itemID) {
break;
}
}
itemIndex = -1;
if (i != ARRAY_COUNT(playerData->invItems)) {
itemIndex = i;
}
evt_set_variable(script, value, itemIndex);
return ApiStatus_DONE2;
}
ApiStatus RemoveItem(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
s32 value = *args++;
PlayerData* playerData = &gPlayerData;
s32 i;
s32 itemIndex;
for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
if (playerData->invItems[i] == itemID) {
break;
}
}
itemIndex = -1;
if (i != ARRAY_COUNT(playerData->invItems)) {
itemIndex = i;
}
if (itemIndex >= 0) {
// This is `playerData->invItems[i]`, but we have to do weird
// pointer math to get the output asm to exactly match :/
*(playerData->invItems + i) = ITEM_NONE;
}
sort_items();
evt_set_variable(script, value, itemIndex);
return ApiStatus_DONE2;
}
ApiStatus CountFortessKeys(Evt* script, s32 isInitialCall) {
s32 outVar = *script->ptrReadPos;
evt_set_variable(script, outVar, get_fortress_key_count());
return ApiStatus_DONE2;
}
ApiStatus RemoveFortressKeys(Evt* script, s32 isInitialCall) {
s32 num = evt_get_variable(script, *script->ptrReadPos);
subtract_fortress_keys(num);
return ApiStatus_DONE2;
}
ApiStatus MakeItemEntity(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
s32 x = evt_get_variable(script, *args++);
s32 y = evt_get_variable(script, *args++);
s32 z = evt_get_variable(script, *args++);
s32 itemSpawnMode = evt_get_variable(script, *args++);
s32 pickupVar = evt_get_variable_index(script, *args++);
script->varTable[0] = make_item_entity_nodelay(itemID, x, y, z, itemSpawnMode, pickupVar);
return ApiStatus_DONE2;
}
ApiStatus DropItemEntity(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
s32 x = evt_get_variable(script, *args++);
s32 y = evt_get_variable(script, *args++);
s32 z = evt_get_variable(script, *args++);
s32 itemSpawnMode = evt_get_variable(script, *args++);
s32 pickupVar = evt_get_variable(script, *args++);
script->varTable[0] = make_item_entity_nodelay(itemID, x, y, z, itemSpawnMode, pickupVar);
return ApiStatus_DONE2;
}
ApiStatus DropTinyItemEntity(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID = evt_get_variable(script, *args++);
s32 x = evt_get_variable(script, *args++);
s32 y = evt_get_variable(script, *args++);
s32 z = evt_get_variable(script, *args++);
s32 itemSpawnMode = evt_get_variable(script, *args++);
s32 pickupVar = evt_get_variable_index(script, *args++);
script->varTable[0] = make_item_entity_nodelay(itemID, x, y, z, itemSpawnMode, pickupVar);
set_item_entity_flags(script->varTable[0], ITEM_ENTITY_FLAGS_TINY);
return ApiStatus_DONE2;
}
ApiStatus RemoveItemEntity(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemEntityIndex = evt_get_variable(script, *args++);
remove_item_entity_by_index(itemEntityIndex);
return ApiStatus_DONE2;
}
ApiStatus AddBadge(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 badgeID = evt_get_variable(script, *args++);
Bytecode outBadgeIdx = *args++;
evt_set_variable(script, outBadgeIdx, add_badge(badgeID));
return ApiStatus_DONE2;
}
ApiStatus RemoveBadge(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
PlayerData* playerData = &gPlayerData;
s32 badge = evt_get_variable(script, *args++);
s32 i;
for (i = 0; i < ARRAY_COUNT(playerData->badges); i++) {
if (playerData->badges[i] == badge) {
playerData->badges[i] = ITEM_NONE;
}
}
for (i = 0; i < ARRAY_COUNT(playerData->equippedBadges); i++) {
if (playerData->equippedBadges[i] == badge) {
playerData->equippedBadges[i] = ITEM_NONE;
}
}
return ApiStatus_DONE2;
}
ApiStatus SetItemPos(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
ItemEntity* ptrItemEntity;
s32 itemEntityIndex;
s32 x, y, z;
itemEntityIndex = evt_get_variable(script, *args++);
x = evt_get_variable(script, *args++);
y = evt_get_variable(script, *args++);
z = evt_get_variable(script, *args++);
ptrItemEntity = (ItemEntity*) get_item_entity(itemEntityIndex);
ptrItemEntity->position.x = x;
ptrItemEntity->position.y = y;
ptrItemEntity->position.z = z;
return ApiStatus_DONE2;
}
ApiStatus SetItemFlags(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemEntityIndex = evt_get_variable(script, *args++);
s32 flagBits = *args++;
s32 var2 = evt_get_variable(script, *args++);
ItemEntity* itemEntity = get_item_entity(itemEntityIndex);
if (var2 != 0) {
itemEntity->flags |= flagBits;
} else {
itemEntity->flags &= ~flagBits;
}
return ApiStatus_DONE2;
}
ApiStatus SetItemAlpha(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemEntityIndex = evt_get_variable(script, *args++);
s32 alpha = evt_get_variable(script, *args++);
ItemEntity* itemEntity = get_item_entity(itemEntityIndex);
itemEntity->alpha = alpha;
return ApiStatus_DONE2;
}
ApiStatus AddCoin(Evt* script, s32 isInitialCall) {
script->varTable[0] = add_coins(evt_get_variable(script, *script->ptrReadPos));
return ApiStatus_DONE2;
}
ApiStatus AddStarPoints(Evt* script, s32 isInitialCall) {
script->varTable[0] = add_star_points(evt_get_variable(script, *script->ptrReadPos));
return ApiStatus_DONE2;
}
ApiStatus AddStarPieces(Evt* script, s32 isInitialCall) {
script->varTable[0] = add_star_pieces(evt_get_variable(script, *script->ptrReadPos));
return ApiStatus_DONE2;
}
ApiStatus GetItemPower(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemIdx = evt_get_variable(script, *args++);
Bytecode out1 = *args++;
Bytecode out2 = *args++;
evt_set_variable(script, out1, (&gItemTable[itemIdx])->potencyA);
evt_set_variable(script, out2, (&gItemTable[itemIdx])->potencyB);
return ApiStatus_DONE2;
}
ApiStatus ShowGotItem(Evt* script, s32 isInitialCall) {
Bytecode* args = script->ptrReadPos;
s32 itemID, category, pickupMsgFlags;
if (isInitialCall) {
script->functionTemp[0] = 0;
}
switch (script->functionTemp[0]) {
case 0:
itemID = evt_get_variable(script, *args++);
category = evt_get_variable(script, *args++);
pickupMsgFlags = *args++;
script->functionTemp[1] = make_item_entity_at_player(itemID, category, pickupMsgFlags);
script->functionTemp[0] = 1;
break;
case 1:
if (get_item_entity(script->functionTemp[1]) == NULL) {
return ApiStatus_DONE2;
}
break;
}
return ApiStatus_BLOCK;
}