本文整理汇总了C++中PAL_XY函数的典型用法代码示例。如果您正苦于以下问题:C++ PAL_XY函数的具体用法?C++ PAL_XY怎么用?C++ PAL_XY使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PAL_XY函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PAL_EndDialog
VOID
PAL_EndDialog(
VOID
)
/*++
Purpose:
Ends a dialog.
Parameters:
None.
Return value:
None.
--*/
{
PAL_ClearDialog(TRUE);
//
// Set some default parameters, as there are some parts of script
// which doesn't have a "start dialog" instruction before showing the dialog.
//
g_TextLib.posDialogTitle = PAL_XY(12, 8);
g_TextLib.posDialogText = PAL_XY(44, 26);
g_TextLib.bCurrentFontColor = FONT_COLOR_DEFAULT;
g_TextLib.bDialogPosition = kDialogUpper;
g_TextLib.fUserSkip = FALSE;
g_TextLib.fPlayingRNG = FALSE;
}
示例2: PAL_ClearDialog
VOID
PAL_ClearDialog(
BOOL fWaitForKey
)
/*++
Purpose:
Clear the state of the dialog.
Parameters:
[IN] fWaitForKey - whether wait for any key or not.
Return value:
None.
--*/
{
if (g_TextLib.nCurrentDialogLine > 0 && fWaitForKey)
{
PAL_DialogWaitForKey();
}
g_TextLib.nCurrentDialogLine = 0;
if (g_TextLib.bDialogPosition == kDialogCenter)
{
g_TextLib.posDialogTitle = PAL_XY(12, 8);
g_TextLib.posDialogText = PAL_XY(44, 26);
g_TextLib.bCurrentFontColor = FONT_COLOR_DEFAULT;
g_TextLib.bDialogPosition = kDialogUpper;
}
}
示例3: PAL_InventoryMenu
static VOID
PAL_InventoryMenu(
VOID
)
/*++
Purpose:
Show the inventory menu.
Parameters:
None.
Return value:
None.
--*/
{
static WORD w = 0;
const SDL_Rect rect = {30, 60, 75, 60};
MENUITEM rgMenuItem[2] =
{
// value label enabled pos
{ 1, INVMENU_LABEL_USE, TRUE, PAL_XY(43, 73) },
{ 2, INVMENU_LABEL_EQUIP, TRUE, PAL_XY(43, 73 + 18) },
};
PAL_CreateBox(PAL_XY(30, 60), 1, 1, 0, FALSE);
VIDEO_UpdateScreen(&rect);
w = PAL_ReadMenu(NULL, rgMenuItem, 2, w - 1, MENUITEM_COLOR);
switch (w)
{
case 1:
PAL_GameUseItem();
break;
case 2:
PAL_GameEquipItem();
break;
}
}
示例4: PAL_LoadDefaultGame
/*++
Load the default game data.
--*/
static VOID PAL_LoadDefaultGame(void)
{
const GAMEDATA *p = &gpGlobals->g;
UINT32 i;
//
// Load the default data from the game data files.
//
LOAD_DATA(p->lprgEventObject, p->nEventObject * sizeof(EVENTOBJECT),
0, gpGlobals->f.fpSSS);
PAL_MKFReadChunk((LPBYTE)(p->rgScene), sizeof(p->rgScene), 1, gpGlobals->f.fpSSS);
DO_BYTESWAP(p->rgScene, sizeof(p->rgScene));
PAL_MKFReadChunk((LPBYTE)(p->rgObject), sizeof(p->rgObject), 2, gpGlobals->f.fpSSS);
DO_BYTESWAP(p->rgObject, sizeof(p->rgObject));
PAL_MKFReadChunk((LPBYTE)(&(p->PlayerRoles)), sizeof(PLAYERROLES),
3, gpGlobals->f.fpDATA);
DO_BYTESWAP(&(p->PlayerRoles), sizeof(PLAYERROLES));
//
// Set some other default data.
//
gpGlobals->dwCash = 0;
gpGlobals->wNumMusic = 0;
gpGlobals->wNumPalette = 0;
gpGlobals->wNumScene = 1;
gpGlobals->wCollectValue = 0;
gpGlobals->fNightPalette = FALSE;
gpGlobals->wMaxPartyMemberIndex = 0;
gpGlobals->viewport = PAL_XY(0, 0);
gpGlobals->wLayer = 0;
gpGlobals->wChaseRange = 1;
#ifndef PAL_CLASSIC
gpGlobals->bBattleSpeed = 2;
#endif
memset(gpGlobals->rgInventory, 0, sizeof(gpGlobals->rgInventory));
memset(gpGlobals->rgPoisonStatus, 0, sizeof(gpGlobals->rgPoisonStatus));
memset(gpGlobals->rgParty, 0, sizeof(gpGlobals->rgParty));
memset(gpGlobals->rgTrail, 0, sizeof(gpGlobals->rgTrail));
memset(&(gpGlobals->Exp), 0, sizeof(gpGlobals->Exp));
for (i = 0; i < MAX_PLAYER_ROLES; i++)
{
gpGlobals->Exp.rgPrimaryExp[i].wLevel = p->PlayerRoles.rgwLevel[i];
gpGlobals->Exp.rgHealthExp[i].wLevel = p->PlayerRoles.rgwLevel[i];
gpGlobals->Exp.rgMagicExp[i].wLevel = p->PlayerRoles.rgwLevel[i];
gpGlobals->Exp.rgAttackExp[i].wLevel = p->PlayerRoles.rgwLevel[i];
gpGlobals->Exp.rgMagicPowerExp[i].wLevel = p->PlayerRoles.rgwLevel[i];
gpGlobals->Exp.rgDefenseExp[i].wLevel = p->PlayerRoles.rgwLevel[i];
gpGlobals->Exp.rgDexterityExp[i].wLevel = p->PlayerRoles.rgwLevel[i];
gpGlobals->Exp.rgFleeExp[i].wLevel = p->PlayerRoles.rgwLevel[i];
}
gpGlobals->fEnteringScene = TRUE;
}
示例5: PAL_ShowCash
LPBOX
PAL_ShowCash(
DWORD dwCash
)
/*++
Purpose:
Show the cash amount at the top left corner of the screen.
Parameters:
[IN] dwCash - amount of cash.
Return value:
pointer to the saved screen part.
--*/
{
LPBOX lpBox;
//
// Create the box.
//
lpBox = PAL_CreateSingleLineBox(PAL_XY(0, 0), 5, TRUE);
if (lpBox == NULL)
{
return NULL;
}
//
// Draw the text label.
//
PAL_DrawText(PAL_GetWord(CASH_LABEL), PAL_XY(10, 10), 0, FALSE, FALSE);
//
// Draw the cash amount.
//
PAL_DrawNumber(dwCash, 6, PAL_XY(49, 14), kNumColorYellow, kNumAlignRight);
return lpBox;
}
示例6: PAL_BattleSpeedMenu
static VOID
PAL_BattleSpeedMenu(
VOID
)
/*++
Purpose:
Show the Battle Speed selection box.
Parameters:
None.
Return value:
None.
--*/
{
LPBOX lpBox;
WORD wReturnValue;
const SDL_Rect rect = {131, 100, 165, 50};
MENUITEM rgMenuItem[5] = {
{ 1, BATTLESPEEDMENU_LABEL_1, TRUE, PAL_XY(145, 110) },
{ 2, BATTLESPEEDMENU_LABEL_2, TRUE, PAL_XY(170, 110) },
{ 3, BATTLESPEEDMENU_LABEL_3, TRUE, PAL_XY(195, 110) },
{ 4, BATTLESPEEDMENU_LABEL_4, TRUE, PAL_XY(220, 110) },
{ 5, BATTLESPEEDMENU_LABEL_5, TRUE, PAL_XY(245, 110) },
};
//
// Create the boxes
//
lpBox = PAL_CreateSingleLineBox(PAL_XY(131, 100), 8, TRUE);
VIDEO_UpdateScreen(&rect);
//
// Activate the menu
//
wReturnValue = PAL_ReadMenu(NULL, rgMenuItem, 5, gpGlobals->bBattleSpeed - 1,
MENUITEM_COLOR);
//
// Delete the boxes
//
PAL_DeleteBox(lpBox);
VIDEO_UpdateScreen(&rect);
if (wReturnValue != MENUITEM_VALUE_CANCELLED)
{
gpGlobals->bBattleSpeed = wReturnValue;
}
}
示例7: PAL_BattleEnemyEscape
/*++
Enemy flee the battle.
--*/
VOID PAL_BattleEnemyEscape(void)
{
int j, x, y, w;
BOOL f = TRUE;
SOUND_Play(45);
//
// Show the animation
//
while (f)
{
f = FALSE;
for (j = 0; j <= g_Battle.wMaxEnemyIndex; j++)
{
if (g_Battle.rgEnemy[j].wObjectID == 0)
{
continue;
}
x = PAL_X(g_Battle.rgEnemy[j].pos) - 5;
y = PAL_Y(g_Battle.rgEnemy[j].pos);
g_Battle.rgEnemy[j].pos = PAL_XY(x, y);
w = PAL_RLEGetWidth(PAL_SpriteGetFrame(g_Battle.rgEnemy[j].lpSprite, 0));
if (x + w > 0)
{
f = TRUE;
}
}
PAL_BattleMakeScene();
SDL_BlitSurface(g_Battle.lpSceneBuf, NULL, gpScreen, NULL);
VIDEO_UpdateScreen(NULL);
UTIL_Delay(10);
}
UTIL_Delay(500);
g_Battle.BattleResult = kBattleResultTerminated;
}
示例8: PAL_BattleUIShowNum
VOID
PAL_BattleUIShowNum(
WORD wNum,
PAL_POS pos,
NUMCOLOR color
)
/*++
Purpose:
Show a number on battle screen (indicates HP/MP change).
Parameters:
[IN] wNum - number to be shown.
[IN] pos - position of the number on the screen.
[IN] color - color of the number.
Return value:
None.
--*/
{
int i;
for (i = 0; i < BATTLEUI_MAX_SHOWNUM; i++)
{
if (g_Battle.UI.rgShowNum[i].wNum == 0)
{
g_Battle.UI.rgShowNum[i].wNum = wNum;
g_Battle.UI.rgShowNum[i].pos = PAL_XY(PAL_X(pos) - 15, PAL_Y(pos));
g_Battle.UI.rgShowNum[i].color = color;
g_Battle.UI.rgShowNum[i].dwTime = SDL_GetTicks();
break;
}
}
}
示例9: PAL_AddSpriteToDraw
static VOID
PAL_AddSpriteToDraw(
LPCBITMAPRLE lpSpriteFrame,
int x,
int y,
int iLayer
)
/*++
Purpose:
Add a sprite to our list of drawing.
Parameters:
[IN] lpSpriteFrame - the bitmap of the sprite frame.
[IN] x - the X coordinate on the screen.
[IN] y - the Y coordinate on the screen.
[IN] iLayer - the layer of the sprite.
Return value:
None.
--*/
{
assert(g_nSpriteToDraw < MAX_SPRITE_TO_DRAW);
g_rgSpriteToDraw[g_nSpriteToDraw].lpSpriteFrame = lpSpriteFrame;
g_rgSpriteToDraw[g_nSpriteToDraw].pos = PAL_XY(x, y);
g_rgSpriteToDraw[g_nSpriteToDraw].iLayer = iLayer;
g_nSpriteToDraw++;
}
示例10: PAL_SellMenu_OnItemChange
static VOID
PAL_SellMenu_OnItemChange(
WORD wCurrentItem
)
/*++
Purpose:
Callback function which is called when player selected another item
in the sell item menu.
Parameters:
[IN] wCurrentItem - current item on the menu, indicates the object ID of
the currently selected item.
Return value:
None.
--*/
{
//
// Draw the cash amount
//
PAL_CreateSingleLineBox(PAL_XY(100, 150), 5, FALSE);
PAL_DrawText(PAL_GetWord(CASH_LABEL), PAL_XY(110, 160), 0, FALSE, FALSE);
PAL_DrawNumber(gpGlobals->dwCash, 6, PAL_XY(149, 164), kNumColorYellow, kNumAlignRight);
//
// Draw the price
//
PAL_CreateSingleLineBox(PAL_XY(220, 150), 5, FALSE);
if (gpGlobals->g.rgObject[wCurrentItem].item.wFlags & kItemFlagSellable)
{
PAL_DrawText(PAL_GetWord(SELLMENU_LABEL_PRICE), PAL_XY(230, 160), 0, FALSE, FALSE);
PAL_DrawNumber(gpGlobals->g.rgObject[wCurrentItem].item.wPrice / 2, 6,
PAL_XY(269, 164), kNumColorYellow, kNumAlignRight);
}
}
示例11: PAL_DrawText
VOID
PAL_DrawText(
LPCSTR lpszText,
PAL_POS pos,
BYTE bColor,
BOOL fShadow,
BOOL fUpdate
)
/*++
Purpose:
Draw text on the screen.
Parameters:
[IN] lpszText - the text to be drawn.
[IN] pos - Position of the text.
[IN] bColor - Color of the text.
[IN] fShadow - TRUE if the text is shadowed or not.
[IN] fUpdate - TRUE if update the screen area.
Return value:
None.
--*/
{
SDL_Rect rect, urect;
WORD wChar;
rect.x = PAL_X(pos);
rect.y = PAL_Y(pos);
urect.x = rect.x;
urect.y = rect.y;
urect.h = 16;
urect.w = 0;
while (*lpszText)
{
//
// Draw the character
//
if (*lpszText & 0x80)
{
//
// BIG-5 Chinese Character
//
wChar = SWAP16(((LPBYTE)lpszText)[0] | (((LPBYTE)lpszText)[1] << 8));
if (fShadow)
{
PAL_DrawCharOnSurface(wChar, gpScreen, PAL_XY(rect.x + 1, rect.y + 1), 0);
PAL_DrawCharOnSurface(wChar, gpScreen, PAL_XY(rect.x + 1, rect.y), 0);
}
PAL_DrawCharOnSurface(wChar, gpScreen, PAL_XY(rect.x, rect.y), bColor);
lpszText += 2;
rect.x += 16;
urect.w += 16;
}
else
{
//
// ASCII character
//
if (fShadow)
{
PAL_DrawASCIICharOnSurface(*lpszText, gpScreen, PAL_XY(rect.x + 1, rect.y + 1), 0);
PAL_DrawASCIICharOnSurface(*lpszText, gpScreen, PAL_XY(rect.x + 1, rect.y), 0);
}
PAL_DrawASCIICharOnSurface(*lpszText, gpScreen, PAL_XY(rect.x, rect.y), bColor);
lpszText++;
rect.x += 8;
urect.w += 8;
}
}
//
// Update the screen area
//
if (fUpdate && urect.w > 0)
{
VIDEO_UpdateScreen(&urect);
}
}
示例12: PAL_BattlePlayerEscape
/*++
Player flee the battle.
--*/
VOID PAL_BattlePlayerEscape(void)
{
int i, j;
WORD wPlayerRole;
SOUND_Play(45);
PAL_BattleUpdateFighters();
for (i = 0; i <= gpGlobals->wMaxPartyMemberIndex; i++)
{
wPlayerRole = gpGlobals->rgParty[i].wPlayerRole;
if (gpGlobals->g.PlayerRoles.rgwHP[wPlayerRole] > 0)
{
g_Battle.rgPlayer[i].wCurrentFrame = 0;
}
}
for (i = 0; i < 16; i++)
{
for (j = 0; j <= gpGlobals->wMaxPartyMemberIndex; j++)
{
wPlayerRole = gpGlobals->rgParty[j].wPlayerRole;
if (gpGlobals->g.PlayerRoles.rgwHP[wPlayerRole] > 0)
{
//
// TODO: This is still not the same as the original game
//
switch (j)
{
case 0:
if (gpGlobals->wMaxPartyMemberIndex > 0)
{
g_Battle.rgPlayer[j].pos =
PAL_XY(PAL_X(g_Battle.rgPlayer[j].pos) + 4,
PAL_Y(g_Battle.rgPlayer[j].pos) + 6);
break;
}
case 1:
g_Battle.rgPlayer[j].pos =
PAL_XY(PAL_X(g_Battle.rgPlayer[j].pos) + 4,
PAL_Y(g_Battle.rgPlayer[j].pos) + 4);
break;
case 2:
g_Battle.rgPlayer[j].pos =
PAL_XY(PAL_X(g_Battle.rgPlayer[j].pos) + 6,
PAL_Y(g_Battle.rgPlayer[j].pos) + 3);
break;
// @@@ - extra 4th role:
case 3:
g_Battle.rgPlayer[j].pos =
PAL_XY(PAL_X(g_Battle.rgPlayer[j].pos) + 6,
PAL_Y(g_Battle.rgPlayer[j].pos) + 3);
break;
default:
assert(FALSE); // Not possible
break;
}
}
}
PAL_BattleDelay(1, 0, FALSE);
}
//
// Remove all players from the screen
//
for (i = 0; i <= gpGlobals->wMaxPartyMemberIndex; i++)
{
g_Battle.rgPlayer[i].pos = PAL_XY(9999, 9999);
}
PAL_BattleDelay(1, 0, FALSE);
g_Battle.BattleResult = kBattleResultFleed;
}
示例13: PAL_BattleWon
/*++
Show the "you win" message and add the experience points for players.
--*/
static VOID PAL_BattleWon(void)
{
const SDL_Rect rect = {65, 60, 200, 100};
const SDL_Rect rect1 = {80, 0, 180, 200};
int i, j, iTotalCount;
DWORD dwExp;
WORD w;
BOOL fLevelUp;
PLAYERROLES OrigPlayerRoles;
//
// Backup the initial player stats
//
OrigPlayerRoles = gpGlobals->g.PlayerRoles;
if (g_Battle.iExpGained > 0)
{
//
// Play the "battle win" music
//
PAL_PlayMUS(g_Battle.fIsBoss ? 2 : 3, FALSE, 0);
//
// Show the message about the total number of exp. and cash gained
//
PAL_CreateSingleLineBox(PAL_XY(83, 60), 8, FALSE);
PAL_CreateSingleLineBox(PAL_XY(65, 105), 10, FALSE);
PAL_DrawText(PAL_GetWord(BATTLEWIN_GETEXP_LABEL), PAL_XY(95, 70), 0, FALSE, FALSE);
PAL_DrawText(PAL_GetWord(BATTLEWIN_BEATENEMY_LABEL), PAL_XY(77, 115), 0, FALSE, FALSE);
PAL_DrawText(PAL_GetWord(BATTLEWIN_DOLLAR_LABEL), PAL_XY(197, 115), 0, FALSE, FALSE);
PAL_DrawNumber(g_Battle.iExpGained, 5, PAL_XY(182, 74), kNumColorYellow, kNumAlignRight);
PAL_DrawNumber(g_Battle.iCashGained, 5, PAL_XY(162, 119), kNumColorYellow, kNumAlignMid);
VIDEO_UpdateScreen(&rect);
PAL_WaitForKey(g_Battle.fIsBoss ? 5500 : 3000);
}
//
// Add the cash value
//
gpGlobals->dwCash += g_Battle.iCashGained;
//
// Add the experience points for each players
//
for (i = 0; i <= gpGlobals->wMaxPartyMemberIndex; i++)
{
fLevelUp = FALSE;
w = gpGlobals->rgParty[i].wPlayerRole;
if (gpGlobals->g.PlayerRoles.rgwHP[w] == 0)
{
continue; // don't care about dead players
}
dwExp = gpGlobals->Exp.rgPrimaryExp[w].wExp;
dwExp += g_Battle.iExpGained;
if (gpGlobals->g.PlayerRoles.rgwLevel[w] > MAX_LEVELS)
{
gpGlobals->g.PlayerRoles.rgwLevel[w] = MAX_LEVELS;
}
while (dwExp >= gpGlobals->g.rgLevelUpExp[gpGlobals->g.PlayerRoles.rgwLevel[w]])
{
dwExp -= gpGlobals->g.rgLevelUpExp[gpGlobals->g.PlayerRoles.rgwLevel[w]];
if (gpGlobals->g.PlayerRoles.rgwLevel[w] < MAX_LEVELS)
{
fLevelUp = TRUE;
PAL_PlayerLevelUp(w, 1);
gpGlobals->g.PlayerRoles.rgwHP[w] = gpGlobals->g.PlayerRoles.rgwMaxHP[w];
gpGlobals->g.PlayerRoles.rgwMP[w] = gpGlobals->g.PlayerRoles.rgwMaxMP[w];
}
}
gpGlobals->Exp.rgPrimaryExp[w].wExp = (WORD)dwExp;
if (fLevelUp)
{
//
// Player has gained a level. Show the message
//
PAL_CreateSingleLineBox(PAL_XY(80, 0), 10, FALSE);
PAL_CreateBox(PAL_XY(82, 32), 7, 8, 1, FALSE);
PAL_DrawText(PAL_GetWord(gpGlobals->g.PlayerRoles.rgwName[w]), PAL_XY(110, 10), 0,
FALSE, FALSE);
PAL_DrawText(PAL_GetWord(STATUS_LABEL_LEVEL), PAL_XY(110 + 16 * 3, 10), 0, FALSE, FALSE);
PAL_DrawText(PAL_GetWord(BATTLEWIN_LEVELUP_LABEL), PAL_XY(110 + 16 * 5, 10), 0, FALSE, FALSE);
for (j = 0; j < 8; j++)
{
//.........这里部分代码省略.........
示例14: PAL_LoadBattleSprites
/*++
Load all the loaded sprites.
--*/
VOID PAL_LoadBattleSprites(void)
{
int i, l, x, y, s;
FILE *fp;
PAL_FreeBattleSprites();
fp = UTIL_OpenRequiredFile("abc.mkf");
//
// Load battle sprites for players
//
for (i = 0; i <= gpGlobals->wMaxPartyMemberIndex; i++)
{
s = PAL_GetPlayerBattleSprite(gpGlobals->rgParty[i].wPlayerRole);
l = PAL_MKFGetDecompressedSize(s, gpGlobals->f.fpF);
if (l <= 0)
{
continue;
}
g_Battle.rgPlayer[i].lpSprite = UTIL_calloc(l, 1);
PAL_MKFDecompressChunk(g_Battle.rgPlayer[i].lpSprite, l,
s, gpGlobals->f.fpF);
//
// Set the default position for this player
//
x = g_rgPlayerPos[gpGlobals->wMaxPartyMemberIndex][i][0];
y = g_rgPlayerPos[gpGlobals->wMaxPartyMemberIndex][i][1];
g_Battle.rgPlayer[i].posOriginal = PAL_XY(x, y);
g_Battle.rgPlayer[i].pos = PAL_XY(x, y);
}
//
// Load battle sprites for enemies
//
for (i = 0; i < MAX_ENEMIES_IN_TEAM; i++)
{
if (g_Battle.rgEnemy[i].wObjectID == 0)
{
continue;
}
l = PAL_MKFGetDecompressedSize(
gpGlobals->g.rgObject[g_Battle.rgEnemy[i].wObjectID].enemy.wEnemyID, fp);
if (l <= 0)
{
continue;
}
g_Battle.rgEnemy[i].lpSprite = UTIL_calloc(l, 1);
PAL_MKFDecompressChunk(g_Battle.rgEnemy[i].lpSprite, l,
gpGlobals->g.rgObject[g_Battle.rgEnemy[i].wObjectID].enemy.wEnemyID, fp);
//
// Set the default position for this enemy
//
x = gpGlobals->g.EnemyPos.pos[i][g_Battle.wMaxEnemyIndex].x;
y = gpGlobals->g.EnemyPos.pos[i][g_Battle.wMaxEnemyIndex].y;
y += g_Battle.rgEnemy[i].e.wYPosOffset;
g_Battle.rgEnemy[i].posOriginal = PAL_XY(x, y);
g_Battle.rgEnemy[i].pos = PAL_XY(x, y);
}
fclose(fp);
}
示例15: PAL_ItemSelectMenuUpdate
WORD
PAL_ItemSelectMenuUpdate(
VOID
)
/*++
Purpose:
Initialize the item selection menu.
Parameters:
None.
Return value:
The object ID of the selected item. 0 if cancelled, 0xFFFF if not confirmed.
--*/
{
#ifndef PAL_WIN95
int i, j, k;
WORD wObject;
#else
int i, j, k, line;
WORD wObject, wScript;
#endif
BYTE bColor;
static BYTE bufImage[2048];
static WORD wPrevImageIndex = 0xFFFF;
//
// Process input
//
if (g_InputState.dwKeyPress & kKeyUp)
{
gpGlobals->iCurInvMenuItem -= 3;
}
else if (g_InputState.dwKeyPress & kKeyDown)
{
gpGlobals->iCurInvMenuItem += 3;
}
else if (g_InputState.dwKeyPress & kKeyLeft)
{
gpGlobals->iCurInvMenuItem--;
}
else if (g_InputState.dwKeyPress & kKeyRight)
{
gpGlobals->iCurInvMenuItem++;
}
else if (g_InputState.dwKeyPress & kKeyPgUp)
{
gpGlobals->iCurInvMenuItem -= 3 * 7;
}
else if (g_InputState.dwKeyPress & kKeyPgDn)
{
gpGlobals->iCurInvMenuItem += 3 * 7;
}
else if (g_InputState.dwKeyPress & kKeyMenu)
{
return 0;
}
//
// Make sure the current menu item index is in bound
//
if (gpGlobals->iCurInvMenuItem < 0)
{
gpGlobals->iCurInvMenuItem = 0;
}
else if (gpGlobals->iCurInvMenuItem >= g_iNumInventory)
{
gpGlobals->iCurInvMenuItem = g_iNumInventory - 1;
}
//
// Redraw the box
//
PAL_CreateBox(PAL_XY(2, 0), 6, 17, 1, FALSE);
//
// Draw the texts in the current page
//
i = gpGlobals->iCurInvMenuItem / 3 * 3 - 3 * 4;
if (i < 0)
{
i = 0;
}
for (j = 0; j < 7; j++)
{
for (k = 0; k < 3; k++)
{
wObject = gpGlobals->rgInventory[i].wItem;
bColor = MENUITEM_COLOR;
if (i >= MAX_INVENTORY || wObject == 0)
{
//
// End of the list reached
//
//.........这里部分代码省略.........