mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Merged New Inventory Project into main branch
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1871 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+160
-145
@@ -49,21 +49,21 @@
|
||||
|
||||
extern ITEM_POOL *gpEditingItemPool;
|
||||
|
||||
//Simply counts the number of items in the world. This is used for display purposes.
|
||||
//Simply counts the number of items in the world. This is used for display purposes.
|
||||
UINT16 CountNumberOfEditorPlacementsInWorld( UINT16 usEInfoIndex, UINT16 *pusQuantity ); //wrapper for the next three
|
||||
UINT16 CountNumberOfItemPlacementsInWorld( UINT16 usItem, UINT16 *pusQuantity );
|
||||
UINT16 CountNumberOfItemsWithFrequency( UINT16 usItem, INT8 bFrequency );
|
||||
UINT16 CountNumberOfPressureActionsInWorld();
|
||||
UINT16 CountNumberOfKeysOfTypeInWorld( UINT8 ubKeyID );
|
||||
|
||||
//Finds and selects the next item when right clicking on an item type. Only works if the
|
||||
//Finds and selects the next item when right clicking on an item type. Only works if the
|
||||
//item actually exists in the world.
|
||||
void FindNextItemOfSelectedType(); //wrapper for the next four
|
||||
void SelectNextTriggerWithFrequency( UINT16 usItem, INT8 bFrequency );
|
||||
void SelectNextItemOfType( UINT16 usItem );
|
||||
void SelectNextPressureAction();
|
||||
void SelectNextKeyOfType( UINT8 ubKeyID );
|
||||
|
||||
|
||||
INT32 giDefaultExistChance = 100;
|
||||
|
||||
typedef struct IPListNode
|
||||
@@ -85,7 +85,7 @@ void BuildItemPoolList()
|
||||
KillItemPoolList();
|
||||
for( i = 0; i < WORLD_MAX; i++ )
|
||||
{
|
||||
if( GetItemPool( i, &temp , 0) )
|
||||
if( GetItemPoolFromGround( i, &temp ) )
|
||||
{
|
||||
if( !pIPHead )
|
||||
{
|
||||
@@ -151,7 +151,7 @@ void EntryInitEditorItemsInfo()
|
||||
eInfo.sNumTriggers = NUMBER_TRIGGERS;
|
||||
for( i=0; i < MAXITEMS; i++ )
|
||||
{
|
||||
if ( Item[i].usItemClass == 0 )
|
||||
if ( Item[i].usItemClass == 0 )
|
||||
break;
|
||||
item = &Item[i];
|
||||
//if( Item[i].fFlags & ITEM_NOT_EDITOR )
|
||||
@@ -181,6 +181,9 @@ void EntryInitEditorItemsInfo()
|
||||
case IC_ARMOUR:
|
||||
eInfo.sNumArmour++;
|
||||
break;
|
||||
case IC_LBEGEAR:
|
||||
eInfo.sLBEGear++;
|
||||
break;
|
||||
case IC_GRENADE:
|
||||
case IC_BOMB:
|
||||
eInfo.sNumExplosives++;
|
||||
@@ -188,11 +191,11 @@ void EntryInitEditorItemsInfo()
|
||||
case IC_MEDKIT:
|
||||
case IC_KIT:
|
||||
case IC_FACE:
|
||||
case IC_MISC:
|
||||
case IC_MONEY:
|
||||
if( eInfo.sNumEquipment1 < 30 )
|
||||
eInfo.sNumEquipment1++;
|
||||
else if( eInfo.sNumEquipment2 < 30 )
|
||||
eInfo.sNumEquipment1++;
|
||||
break;
|
||||
case IC_MISC:
|
||||
if( eInfo.sNumEquipment2 < eInfo.sNumEquipment3 )
|
||||
eInfo.sNumEquipment2++;
|
||||
else
|
||||
eInfo.sNumEquipment3++;
|
||||
@@ -209,7 +212,7 @@ void EntryInitEditorItemsInfo()
|
||||
void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
{
|
||||
VSURFACE_DESC vs_desc;
|
||||
UINT8 *pDestBuf, *pSrcBuf;
|
||||
UINT8 *pDestBuf, *pSrcBuf;
|
||||
UINT32 uiSrcPitchBYTES, uiDestPitchBYTES;
|
||||
INVTYPE *item;
|
||||
SGPRect SaveRect, NewRect;
|
||||
@@ -235,16 +238,16 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
else
|
||||
{ //User selected a different item classification -- delete it first.
|
||||
ClearEditorItemsInfo();
|
||||
ClearTaskbarRegion( iScreenWidthOffset + 100, 2 * iScreenHeightOffset + 360, iScreenWidthOffset + 480, 2 * iScreenHeightOffset + 440 );
|
||||
ClearTaskbarRegion( iScreenWidthOffset + 100, 2 * iScreenHeightOffset + 360, iScreenWidthOffset + 480, 2 * iScreenHeightOffset + 440 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Clear the menu area, so that the buffer doesn't get corrupted.
|
||||
ClearTaskbarRegion( iScreenWidthOffset + 100, 2 * iScreenHeightOffset + 360, iScreenWidthOffset + 480, 2 * iScreenHeightOffset + 440 );
|
||||
ClearTaskbarRegion( iScreenWidthOffset + 100, 2 * iScreenHeightOffset + 360, iScreenWidthOffset + 480, 2 * iScreenHeightOffset + 440 );
|
||||
}
|
||||
EnableEditorRegion( ITEM_REGION_ID );
|
||||
|
||||
|
||||
eInfo.uiItemType = uiItemType;
|
||||
eInfo.fActive = TRUE;
|
||||
//Begin initialization of data.
|
||||
@@ -265,6 +268,11 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
eInfo.sScrollIndex = eInfo.sSaveArmourScrollIndex;
|
||||
eInfo.sSelItemIndex = eInfo.sSaveSelArmourIndex;
|
||||
break;
|
||||
case TBAR_MODE_ITEM_LBEGEAR:
|
||||
eInfo.sNumItems = eInfo.sLBEGear;
|
||||
eInfo.sScrollIndex = eInfo.sSaveLBEScrollIndex;
|
||||
eInfo.sSelItemIndex = eInfo.sSaveSelLBEIndex;
|
||||
break;
|
||||
case TBAR_MODE_ITEM_EXPLOSIVES:
|
||||
eInfo.sNumItems = eInfo.sNumExplosives;
|
||||
eInfo.sScrollIndex = eInfo.sSaveExplosivesScrollIndex;
|
||||
@@ -307,7 +315,7 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
DetermineItemsScrolling();
|
||||
//calculate the width of the buffer based on the number of items.
|
||||
//every pair of items (odd rounded up) requires 60 pixels for width.
|
||||
//the minimum buffer size is 420. Height is always 80 pixels.
|
||||
//the minimum buffer size is 420. Height is always 80 pixels.
|
||||
|
||||
eInfo.sWidth = (eInfo.sNumItems > 12) ? ((eInfo.sNumItems+1)/2)*60 : SCREEN_HEIGHT - 120;
|
||||
eInfo.sHeight = 80;
|
||||
@@ -318,7 +326,7 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
vs_desc.usHeight = eInfo.sHeight;
|
||||
vs_desc.ubBitDepth = ubBitDepth;
|
||||
|
||||
//!!!Memory check. Create the item buffer
|
||||
//!!!Memory check. Create the item buffer
|
||||
if(!AddVideoSurface( &vs_desc, &eInfo.uiBuffer ))
|
||||
{
|
||||
eInfo.fKill = TRUE;
|
||||
@@ -332,10 +340,10 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
//copy a blank chunk of the editor interface to the new buffer.
|
||||
for( i=0; i<eInfo.sWidth; i+=60 )
|
||||
{
|
||||
Blt16BPPTo16BPP((UINT16 *)pDestBuf, uiDestPitchBYTES,
|
||||
Blt16BPPTo16BPP((UINT16 *)pDestBuf, uiDestPitchBYTES,
|
||||
(UINT16 *)pSrcBuf, uiSrcPitchBYTES, 0+i, 0, iScreenWidthOffset + 100, 2 * iScreenHeightOffset + 360, 60, 80 );
|
||||
}
|
||||
|
||||
|
||||
UnLockVideoSurface(eInfo.uiBuffer);
|
||||
UnLockVideoSurface(FRAME_BUFFER);
|
||||
|
||||
@@ -364,7 +372,7 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
SetFontDestBuffer( eInfo.uiBuffer, 0, 0, eInfo.sWidth, eInfo.sHeight, FALSE );
|
||||
|
||||
swprintf( pStr, L"%S", LockTable[ i ].ubEditorName );
|
||||
DisplayWrappedString(x, (UINT16)(y+25), 60, 2, SMALLCOMPFONT, FONT_WHITE, pStr, FONT_BLACK, TRUE, CENTER_JUSTIFIED );
|
||||
DisplayWrappedString(x, (UINT16)(y+25), 60, 2, SMALLCOMPFONT, FONT_WHITE, pStr, FONT_BLACK, TRUE, CENTER_JUSTIFIED );
|
||||
|
||||
//Calculate the center position of the graphic in a 60 pixel wide area.
|
||||
sWidth = hVObject->pETRLEObject[item->ubGraphicNum].usWidth;
|
||||
@@ -373,7 +381,7 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
|
||||
BltVideoObjectOutlineFromIndex( eInfo.uiBuffer, uiVideoObjectIndex, item->ubGraphicNum, sStart, y+2, 0, FALSE );
|
||||
//cycle through the various slot positions (0,0), (0,40), (60,0), (60,40), (120,0)...
|
||||
|
||||
|
||||
if( y == 0 )
|
||||
{
|
||||
y = 40;
|
||||
@@ -391,7 +399,7 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
fTypeMatch = FALSE;
|
||||
while( usCounter<MAXITEMS && !fTypeMatch )
|
||||
{
|
||||
if ( Item[usCounter].usItemClass == 0 )
|
||||
if ( Item[usCounter].usItemClass == 0 )
|
||||
break;
|
||||
item = &Item[usCounter];
|
||||
//if( Item[usCounter].fFlags & ITEM_NOT_EDITOR )
|
||||
@@ -433,6 +441,9 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
case IC_ARMOUR:
|
||||
fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_ARMOUR;
|
||||
break;
|
||||
case IC_LBEGEAR:
|
||||
fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_LBEGEAR;
|
||||
break;
|
||||
case IC_GRENADE:
|
||||
case IC_BOMB:
|
||||
fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EXPLOSIVES;
|
||||
@@ -440,13 +451,13 @@ void InitEditorItemsInfo(UINT32 uiItemType)
|
||||
case IC_MEDKIT:
|
||||
case IC_KIT:
|
||||
case IC_FACE:
|
||||
case IC_MISC:
|
||||
case IC_MONEY:
|
||||
fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EQUIPMENT1;
|
||||
break;
|
||||
case IC_MISC:
|
||||
if( usCounter == ACTION_ITEM || usCounter == SWITCH )
|
||||
break;
|
||||
if( iEquipCount < 30 )
|
||||
fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EQUIPMENT1;
|
||||
else if( iEquipCount < 60 )
|
||||
if( iEquipCount < eInfo.sNumEquipment2 )
|
||||
fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EQUIPMENT2;
|
||||
else
|
||||
fTypeMatch = eInfo.uiItemType == TBAR_MODE_ITEM_EQUIPMENT3;
|
||||
@@ -545,7 +556,7 @@ void DetermineItemsScrolling()
|
||||
DisableEditorButton( ITEMS_LEFTSCROLL );
|
||||
else
|
||||
EnableEditorButton( ITEMS_LEFTSCROLL );
|
||||
//Right most scroll position. Calculated by taking every pair of numItems rounded up,
|
||||
//Right most scroll position. Calculated by taking every pair of numItems rounded up,
|
||||
//and subtracting 7 (because a scroll index 0 is disabled if there are <=12 items,
|
||||
//index 1 for <=14 items, index 2 for <=16 items...
|
||||
if( eInfo.sScrollIndex == max( ((eInfo.sNumItems+1)/2)-6, 0 ) )
|
||||
@@ -556,7 +567,7 @@ void DetermineItemsScrolling()
|
||||
|
||||
void RenderEditorItemsInfo()
|
||||
{
|
||||
UINT8 *pDestBuf, *pSrcBuf;
|
||||
UINT8 *pDestBuf, *pSrcBuf;
|
||||
UINT32 uiSrcPitchBYTES, uiDestPitchBYTES;
|
||||
INVTYPE *item;
|
||||
HVOBJECT hVObject;
|
||||
@@ -579,13 +590,13 @@ void RenderEditorItemsInfo()
|
||||
pDestBuf = LockVideoSurface(FRAME_BUFFER, &uiDestPitchBYTES);
|
||||
pSrcBuf = LockVideoSurface(eInfo.uiBuffer, &uiSrcPitchBYTES);
|
||||
|
||||
Blt16BPPTo16BPP((UINT16 *)pDestBuf, uiDestPitchBYTES,
|
||||
Blt16BPPTo16BPP((UINT16 *)pDestBuf, uiDestPitchBYTES,
|
||||
(UINT16 *)pSrcBuf, uiSrcPitchBYTES, iScreenWidthOffset + 110, 2 * iScreenHeightOffset + 360, 60*eInfo.sScrollIndex, 0, 360, 80 );
|
||||
|
||||
UnLockVideoSurface(eInfo.uiBuffer);
|
||||
UnLockVideoSurface(FRAME_BUFFER);
|
||||
|
||||
//calculate the min and max index that is currently shown. This determines
|
||||
//calculate the min and max index that is currently shown. This determines
|
||||
//if the highlighted and/or selected items are drawn with the outlines.
|
||||
minIndex = eInfo.sScrollIndex * 2;
|
||||
maxIndex = minIndex + 11;
|
||||
@@ -598,7 +609,7 @@ void RenderEditorItemsInfo()
|
||||
item = &Item[eInfo.pusItemIndex[eInfo.sHilitedItemIndex]];
|
||||
uiVideoObjectIndex = GetInterfaceGraphicForItem( item );
|
||||
GetVideoObject( &hVObject, uiVideoObjectIndex );
|
||||
|
||||
|
||||
x = iScreenWidthOffset + (eInfo.sHilitedItemIndex/2 - eInfo.sScrollIndex)*60 + 110;
|
||||
y = 2 * iScreenHeightOffset + 360 + (eInfo.sHilitedItemIndex % 2) * 40;
|
||||
sWidth = hVObject->pETRLEObject[item->ubGraphicNum].usWidth;
|
||||
@@ -618,7 +629,7 @@ void RenderEditorItemsInfo()
|
||||
item = &Item[eInfo.pusItemIndex[eInfo.sSelItemIndex]];
|
||||
uiVideoObjectIndex = GetInterfaceGraphicForItem( item );
|
||||
GetVideoObject( &hVObject, uiVideoObjectIndex );
|
||||
|
||||
|
||||
x = iScreenWidthOffset + (eInfo.sSelItemIndex/2 - eInfo.sScrollIndex)*60 + 110;
|
||||
y = 2 * iScreenHeightOffset + 360 + (eInfo.sSelItemIndex % 2) * 40;
|
||||
sWidth = hVObject->pETRLEObject[item->ubGraphicNum].usWidth;
|
||||
@@ -683,6 +694,10 @@ void ClearEditorItemsInfo()
|
||||
eInfo.sSaveSelArmourIndex = eInfo.sSelItemIndex;
|
||||
eInfo.sSaveArmourScrollIndex = eInfo.sScrollIndex;
|
||||
break;
|
||||
case TBAR_MODE_ITEM_LBEGEAR:
|
||||
eInfo.sSaveSelLBEIndex = eInfo.sSelItemIndex;
|
||||
eInfo.sSaveLBEScrollIndex = eInfo.sScrollIndex;
|
||||
break;
|
||||
case TBAR_MODE_ITEM_EXPLOSIVES:
|
||||
eInfo.sSaveSelExplosivesIndex = eInfo.sSelItemIndex;
|
||||
eInfo.sSaveExplosivesScrollIndex = eInfo.sScrollIndex;
|
||||
@@ -708,7 +723,7 @@ void ClearEditorItemsInfo()
|
||||
eInfo.sSaveKeysScrollIndex = eInfo.sScrollIndex;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HandleItemsPanel( UINT16 usScreenX, UINT16 usScreenY, INT8 bEvent )
|
||||
{
|
||||
@@ -720,13 +735,13 @@ void HandleItemsPanel( UINT16 usScreenX, UINT16 usScreenY, INT8 bEvent )
|
||||
if( usScreenY >= (2 * iScreenHeightOffset + 400) )
|
||||
sIndex++;
|
||||
//Add the converted mouse's XPos into a relative index;
|
||||
//Calc: starting from 110, for every 60 pixels, add 2 to the index
|
||||
|
||||
//Calc: starting from 110, for every 60 pixels, add 2 to the index
|
||||
|
||||
sIndex += ((usScreenX-110-iScreenWidthOffset)/60) * 2;
|
||||
switch( bEvent )
|
||||
{
|
||||
case GUI_MOVE_EVENT:
|
||||
if( sIndex < eInfo.sNumItems )
|
||||
if( sIndex < eInfo.sNumItems )
|
||||
{
|
||||
if( eInfo.sHilitedItemIndex != sIndex )
|
||||
gfRenderTaskbar = TRUE;
|
||||
@@ -792,13 +807,13 @@ void HideItemCursor( INT32 iMapIndex )
|
||||
BOOLEAN TriggerAtGridNo( INT16 sGridNo )
|
||||
{
|
||||
ITEM_POOL *pItemPool;
|
||||
if( !GetItemPool( sGridNo, &pItemPool, 0 ) )
|
||||
if( !GetItemPoolFromGround( sGridNo, &pItemPool ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
while( pItemPool )
|
||||
{
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].o.usItem == SWITCH )
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].object.usItem == SWITCH )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
@@ -810,7 +825,6 @@ BOOLEAN TriggerAtGridNo( INT16 sGridNo )
|
||||
|
||||
void AddSelectedItemToWorld( INT16 sGridNo )
|
||||
{
|
||||
OBJECTTYPE tempObject;
|
||||
OBJECTTYPE *pObject;
|
||||
INVTYPE *pItem;
|
||||
ITEM_POOL *pItemPool;
|
||||
@@ -823,17 +837,16 @@ void AddSelectedItemToWorld( INT16 sGridNo )
|
||||
//Extract the currently selected item.
|
||||
SpecifyItemToEdit( NULL, -1 );
|
||||
|
||||
//memset( &tempObject, 0, sizeof( OBJECTTYPE ) );
|
||||
if( eInfo.uiItemType == TBAR_MODE_ITEM_KEYS )
|
||||
{
|
||||
CreateKeyObject( &tempObject, 1, (UINT8)eInfo.sSelItemIndex );
|
||||
CreateKeyObject( &gTempObject, 1, (UINT8)eInfo.sSelItemIndex );
|
||||
}
|
||||
else
|
||||
{
|
||||
CreateItem( eInfo.pusItemIndex[eInfo.sSelItemIndex], 100, &tempObject );
|
||||
CreateItem( eInfo.pusItemIndex[eInfo.sSelItemIndex], 100, &gTempObject );
|
||||
}
|
||||
usFlags = 0;
|
||||
switch( tempObject.usItem )
|
||||
switch( gTempObject.usItem )
|
||||
{
|
||||
case MINE:
|
||||
if ( bVisibility == BURIED )
|
||||
@@ -844,11 +857,11 @@ void AddSelectedItemToWorld( INT16 sGridNo )
|
||||
case MONEY:
|
||||
case SILVER:
|
||||
case GOLD:
|
||||
tempObject.ItemData.Money.bMoneyStatus = 100;
|
||||
tempObject.ItemData.Money.uiMoneyAmount = 100 + Random( 19901 );
|
||||
gTempObject[0]->data.objectStatus = 100;
|
||||
gTempObject[0]->data.money.uiMoneyAmount = 100 + Random( 19901 );
|
||||
break;
|
||||
case OWNERSHIP:
|
||||
tempObject.ItemData.Owner.ubOwnerProfile = NO_PROFILE;
|
||||
gTempObject[0]->data.owner.ubOwnerProfile = NO_PROFILE;
|
||||
bVisibility = BURIED;
|
||||
break;
|
||||
case SWITCH:
|
||||
@@ -857,42 +870,42 @@ void AddSelectedItemToWorld( INT16 sGridNo )
|
||||
return;
|
||||
}
|
||||
bVisibility = BURIED;
|
||||
tempObject.ItemData.Trigger.bBombStatus = 100;
|
||||
tempObject.ItemData.Trigger.ubBombOwner = 1;
|
||||
gTempObject[0]->data.objectStatus = 100;
|
||||
gTempObject[0]->data.misc.ubBombOwner = 1;
|
||||
if( eInfo.sSelItemIndex < 2 )
|
||||
tempObject.ItemData.Trigger.BombTrigger.bFrequency = PANIC_FREQUENCY;
|
||||
gTempObject[0]->data.misc.bFrequency = PANIC_FREQUENCY;
|
||||
else if( eInfo.sSelItemIndex < 4 )
|
||||
tempObject.ItemData.Trigger.BombTrigger.bFrequency = PANIC_FREQUENCY_2;
|
||||
gTempObject[0]->data.misc.bFrequency = PANIC_FREQUENCY_2;
|
||||
else if( eInfo.sSelItemIndex < 6 )
|
||||
tempObject.ItemData.Trigger.BombTrigger.bFrequency = PANIC_FREQUENCY_3;
|
||||
gTempObject[0]->data.misc.bFrequency = PANIC_FREQUENCY_3;
|
||||
else
|
||||
tempObject.ItemData.Trigger.BombTrigger.bFrequency = (INT8)(FIRST_MAP_PLACED_FREQUENCY + (eInfo.sSelItemIndex-4) / 2);
|
||||
gTempObject[0]->data.misc.bFrequency = (INT8)(FIRST_MAP_PLACED_FREQUENCY + (eInfo.sSelItemIndex-4) / 2);
|
||||
usFlags |= WORLD_ITEM_ARMED_BOMB;
|
||||
break;
|
||||
case ACTION_ITEM:
|
||||
bVisibility = BURIED;
|
||||
tempObject.ItemData.Trigger.bBombStatus = 100;
|
||||
tempObject.ItemData.Trigger.ubBombOwner = 1;
|
||||
tempObject.bTrap = gbDefaultBombTrapLevel;
|
||||
gTempObject[0]->data.objectStatus = 100;
|
||||
gTempObject[0]->data.misc.ubBombOwner = 1;
|
||||
gTempObject[0]->data.bTrap = gbDefaultBombTrapLevel;
|
||||
if( eInfo.sSelItemIndex < PRESSURE_ACTION_ID )
|
||||
{
|
||||
tempObject.ItemData.Trigger.bDetonatorType = BOMB_REMOTE;
|
||||
gTempObject[0]->data.misc.bDetonatorType = BOMB_REMOTE;
|
||||
if( eInfo.sSelItemIndex < 2 )
|
||||
tempObject.ItemData.Trigger.BombTrigger.bFrequency = PANIC_FREQUENCY;
|
||||
gTempObject[0]->data.misc.bFrequency = PANIC_FREQUENCY;
|
||||
else if( eInfo.sSelItemIndex < 4 )
|
||||
tempObject.ItemData.Trigger.BombTrigger.bFrequency = PANIC_FREQUENCY_2;
|
||||
gTempObject[0]->data.misc.bFrequency = PANIC_FREQUENCY_2;
|
||||
else if( eInfo.sSelItemIndex < 6 )
|
||||
tempObject.ItemData.Trigger.BombTrigger.bFrequency = PANIC_FREQUENCY_3;
|
||||
gTempObject[0]->data.misc.bFrequency = PANIC_FREQUENCY_3;
|
||||
else
|
||||
tempObject.ItemData.Trigger.BombTrigger.bFrequency = (INT8)(FIRST_MAP_PLACED_FREQUENCY + (eInfo.sSelItemIndex-4) / 2);
|
||||
gTempObject[0]->data.misc.bFrequency = (INT8)(FIRST_MAP_PLACED_FREQUENCY + (eInfo.sSelItemIndex-4) / 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
tempObject.ItemData.Trigger.bDetonatorType = BOMB_PRESSURE;
|
||||
tempObject.ItemData.Trigger.BombTrigger.bDelay = 0;
|
||||
gTempObject[0]->data.misc.bDetonatorType = BOMB_PRESSURE;
|
||||
gTempObject[0]->data.misc.bDelay = 0;
|
||||
}
|
||||
ChangeActionItem( &tempObject, gbActionItemIndex );
|
||||
tempObject.fFlags |= OBJECT_ARMED_BOMB;
|
||||
ChangeActionItem( &gTempObject, gbActionItemIndex );
|
||||
gTempObject.fFlags |= OBJECT_ARMED_BOMB;
|
||||
if( gbActionItemIndex == ACTIONITEM_SMPIT )
|
||||
Add3X3Pit( sGridNo );
|
||||
else if( gbActionItemIndex == ACTIONITEM_LGPIT )
|
||||
@@ -901,8 +914,8 @@ void AddSelectedItemToWorld( INT16 sGridNo )
|
||||
break;
|
||||
}
|
||||
|
||||
pObject = InternalAddItemToPool( &sGridNo, &tempObject, bVisibility, 0, usFlags, 0, &iItemIndex );
|
||||
if( tempObject.usItem != OWNERSHIP )
|
||||
pObject = InternalAddItemToPool( &sGridNo, &gTempObject, bVisibility, 0, usFlags, 0, -1, &iItemIndex );
|
||||
if( gTempObject.usItem != OWNERSHIP )
|
||||
{
|
||||
gWorldItems[ iItemIndex ].ubNonExistChance = (UINT8)(100 - giDefaultExistChance);
|
||||
}
|
||||
@@ -910,40 +923,40 @@ void AddSelectedItemToWorld( INT16 sGridNo )
|
||||
{
|
||||
gWorldItems[ iItemIndex ].ubNonExistChance = 0;
|
||||
}
|
||||
|
||||
|
||||
pItem = &( Item[ pObject->usItem ] );
|
||||
if( pItem->usItemClass == IC_AMMO )
|
||||
{
|
||||
if (Random( 2 ))
|
||||
{
|
||||
pObject->ItemData.Ammo.ubShotsLeft[0] = Magazine[ pItem->ubClassIndex ].ubMagSize;
|
||||
(*pObject)[0]->data.ubShotsLeft = Magazine[ pItem->ubClassIndex ].ubMagSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
pObject->ItemData.Ammo.ubShotsLeft[0] = (UINT8) Random( Magazine[ pItem->ubClassIndex ].ubMagSize );
|
||||
(*pObject)[0]->data.ubShotsLeft = (UINT8) Random( Magazine[ pItem->ubClassIndex ].ubMagSize );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pObject->ItemData.Generic.bStatus[0] = (INT8)(70 + Random( 26 ));
|
||||
(*pObject)[0]->data.objectStatus = (INT8)(70 + Random( 26 ));
|
||||
}
|
||||
if( pItem->usItemClass & IC_GUN )
|
||||
{
|
||||
if ( pObject->usItem == ROCKET_LAUNCHER )
|
||||
{
|
||||
pObject->ItemData.Gun.ubGunShotsLeft = 1;
|
||||
(*pObject)[0]->data.gun.ubGunShotsLeft = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
pObject->ItemData.Gun.ubGunShotsLeft = (UINT8)(Random( Weapon[ pObject->usItem ].ubMagSize ));
|
||||
(*pObject)[0]->data.gun.ubGunShotsLeft = (UINT8)(Random( Weapon[ pObject->usItem ].ubMagSize ));
|
||||
}
|
||||
}
|
||||
|
||||
if( !GetItemPool( sGridNo, &pItemPool, 0 ) )
|
||||
if( !GetItemPoolFromGround( sGridNo, &pItemPool ) )
|
||||
Assert( 0 );
|
||||
while( pItemPool )
|
||||
{
|
||||
if( &(gWorldItems[ pItemPool->iItemIndex ].o) == pObject )
|
||||
if( &(gWorldItems[ pItemPool->iItemIndex ].object) == pObject )
|
||||
{
|
||||
fFound = TRUE;
|
||||
//ShowSelectedItem();
|
||||
@@ -952,14 +965,14 @@ void AddSelectedItemToWorld( INT16 sGridNo )
|
||||
pItemPool = pItemPool->pNext;
|
||||
}
|
||||
Assert( fFound );
|
||||
|
||||
|
||||
gpItemPool = pItemPool;
|
||||
|
||||
SpecifyItemToEdit( pObject, sGridNo );
|
||||
|
||||
//Get access to the itempool.
|
||||
//search for a current node in list containing same mapindex
|
||||
pIPCurr = pIPHead;
|
||||
pIPCurr = pIPHead;
|
||||
pIPPrev = NULL;
|
||||
while( pIPCurr )
|
||||
{
|
||||
@@ -999,18 +1012,18 @@ void HandleRightClickOnItem( INT16 sGridNo )
|
||||
IPListNode *pIPCurr;
|
||||
|
||||
if( gsItemGridNo == sGridNo )
|
||||
{ //Clicked on the same gridno as the selected item. Automatically select the next
|
||||
{ //Clicked on the same gridno as the selected item. Automatically select the next
|
||||
//item in the same pool.
|
||||
pItemPool = gpItemPool->pNext;
|
||||
if( !pItemPool )
|
||||
{ //currently selected item was last node, so select the head node even if it is the same.
|
||||
GetItemPool( sGridNo, &pItemPool, 0 );
|
||||
GetItemPoolFromGround( sGridNo, &pItemPool );
|
||||
}
|
||||
}
|
||||
else if( !GetItemPool( sGridNo, &pItemPool, 0 ) )
|
||||
else if( !GetItemPoolFromGround( sGridNo, &pItemPool ) )
|
||||
{
|
||||
//possibly relocate selected item to this gridno?
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
gpItemPool = pItemPool;
|
||||
@@ -1028,7 +1041,7 @@ void HandleRightClickOnItem( INT16 sGridNo )
|
||||
pIPCurr = pIPCurr->next;
|
||||
}
|
||||
Assert( gpCurrItemPoolNode );
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->iItemIndex ].o, gpItemPool->sGridNo );
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->iItemIndex ].object, gpItemPool->sGridNo );
|
||||
}
|
||||
|
||||
extern void DeleteSelectedMercsItem();
|
||||
@@ -1048,15 +1061,15 @@ void DeleteSelectedItem()
|
||||
//save the mapindex
|
||||
if( gpItemPool->pNext )
|
||||
{
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->pNext->iItemIndex ].o, gpItemPool->sGridNo );
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->pNext->iItemIndex ].object, gpItemPool->sGridNo );
|
||||
}
|
||||
sGridNo = gpItemPool->sGridNo;
|
||||
//remove the item
|
||||
if( gWorldItems[ gpItemPool->iItemIndex ].o.usItem == ACTION_ITEM )
|
||||
if( gWorldItems[ gpItemPool->iItemIndex ].object.usItem == ACTION_ITEM )
|
||||
{
|
||||
if( gWorldItems[ gpItemPool->iItemIndex ].o.ItemData.Trigger.bActionValue == ACTION_ITEM_SMALL_PIT )
|
||||
if( gWorldItems[ gpItemPool->iItemIndex ].object[0]->data.misc.bActionValue == ACTION_ITEM_SMALL_PIT )
|
||||
Remove3X3Pit( gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
else if( gWorldItems[ gpItemPool->iItemIndex ].o.ItemData.Trigger.bActionValue == ACTION_ITEM_LARGE_PIT )
|
||||
else if( gWorldItems[ gpItemPool->iItemIndex ].object[0]->data.misc.bActionValue == ACTION_ITEM_LARGE_PIT )
|
||||
Remove5X5Pit( gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
}
|
||||
if( gpEditingItemPool == gpItemPool )
|
||||
@@ -1064,7 +1077,7 @@ void DeleteSelectedItem()
|
||||
RemoveItemFromPool( sGridNo, gpItemPool->iItemIndex, 0 );
|
||||
gpItemPool = NULL;
|
||||
//determine if there are still any items at this location
|
||||
if( !GetItemPool( sGridNo, &gpItemPool , 0 ) )
|
||||
if( !GetItemPoolFromGround( sGridNo, &gpItemPool ) )
|
||||
{ //no items left, so remove the node from the list.
|
||||
IPListNode *pIPPrev, *pIPCurr;
|
||||
pIPCurr = pIPHead;
|
||||
@@ -1072,7 +1085,7 @@ void DeleteSelectedItem()
|
||||
while( pIPCurr )
|
||||
{
|
||||
if( pIPCurr->sGridNo == sGridNo )
|
||||
{
|
||||
{
|
||||
if( pIPPrev ) //middle of list
|
||||
pIPPrev->next = pIPCurr->next;
|
||||
else //head of list
|
||||
@@ -1084,7 +1097,7 @@ void DeleteSelectedItem()
|
||||
gpCurrItemPoolNode = pIPHead;
|
||||
if( gpCurrItemPoolNode )
|
||||
{
|
||||
GetItemPool( gpCurrItemPoolNode->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( gpCurrItemPoolNode->sGridNo, &gpItemPool );
|
||||
Assert( gpItemPool );
|
||||
}
|
||||
//remove node
|
||||
@@ -1103,7 +1116,7 @@ void DeleteSelectedItem()
|
||||
void ShowSelectedItem()
|
||||
{
|
||||
if( gpItemPool )
|
||||
{
|
||||
{
|
||||
gpItemPool->bVisible = INVISIBLE;
|
||||
gWorldItems[ gpItemPool->iItemIndex ].bVisible = INVISIBLE;
|
||||
}
|
||||
@@ -1127,16 +1140,16 @@ void SelectNextItemPool()
|
||||
{
|
||||
MarkMapIndexDirty( gpItemPool->sGridNo );
|
||||
}
|
||||
|
||||
//go to the next node. If at end of list, choose pIPHead
|
||||
|
||||
//go to the next node. If at end of list, choose pIPHead
|
||||
if( gpCurrItemPoolNode->next )
|
||||
gpCurrItemPoolNode = gpCurrItemPoolNode->next;
|
||||
else
|
||||
else
|
||||
gpCurrItemPoolNode = pIPHead;
|
||||
//get the item pool at this node's gridno.
|
||||
GetItemPool( gpCurrItemPoolNode->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( gpCurrItemPoolNode->sGridNo, &gpItemPool );
|
||||
MarkMapIndexDirty( gpItemPool->sGridNo );
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->iItemIndex ].o, gpItemPool->sGridNo );
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->iItemIndex ].object, gpItemPool->sGridNo );
|
||||
if( gsItemGridNo != -1 )
|
||||
{
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1153,9 +1166,9 @@ void SelectNextItemInPool()
|
||||
}
|
||||
else
|
||||
{
|
||||
GetItemPool( gpItemPool->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( gpItemPool->sGridNo, &gpItemPool );
|
||||
}
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->iItemIndex ].o, gpItemPool->sGridNo );
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->iItemIndex ].object, gpItemPool->sGridNo );
|
||||
MarkWorldDirty();
|
||||
}
|
||||
}
|
||||
@@ -1170,13 +1183,13 @@ void SelectPrevItemInPool()
|
||||
}
|
||||
else
|
||||
{
|
||||
GetItemPool( gpItemPool->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( gpItemPool->sGridNo, &gpItemPool );
|
||||
while( gpItemPool->pNext )
|
||||
{
|
||||
gpItemPool = gpItemPool->pNext;
|
||||
}
|
||||
}
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->iItemIndex ].o, gpItemPool->sGridNo );
|
||||
SpecifyItemToEdit( &gWorldItems[ gpItemPool->iItemIndex ].object, gpItemPool->sGridNo );
|
||||
MarkWorldDirty();
|
||||
}
|
||||
}
|
||||
@@ -1189,7 +1202,7 @@ void FindNextItemOfSelectedType()
|
||||
if( usItem == ACTION_ITEM || usItem == SWITCH )
|
||||
{
|
||||
if( eInfo.sSelItemIndex < PRESSURE_ACTION_ID )
|
||||
{
|
||||
{
|
||||
INT8 bFrequency;
|
||||
if( eInfo.sSelItemIndex < 2 )
|
||||
bFrequency = PANIC_FREQUENCY;
|
||||
@@ -1202,7 +1215,7 @@ void FindNextItemOfSelectedType()
|
||||
SelectNextTriggerWithFrequency( usItem, bFrequency );
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
SelectNextPressureAction();
|
||||
}
|
||||
}
|
||||
@@ -1230,7 +1243,7 @@ void SelectNextItemOfType( UINT16 usItem )
|
||||
gpItemPool = gpItemPool->pNext;
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == usItem )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
@@ -1246,10 +1259,10 @@ void SelectNextItemOfType( UINT16 usItem )
|
||||
}
|
||||
while( curr )
|
||||
{ //search to the end of the list
|
||||
GetItemPool( curr->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( curr->sGridNo, &gpItemPool );
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == usItem )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
@@ -1264,10 +1277,10 @@ void SelectNextItemOfType( UINT16 usItem )
|
||||
curr = pIPHead;
|
||||
while( curr )
|
||||
{ //search to the end of the list
|
||||
GetItemPool( curr->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( curr->sGridNo, &gpItemPool );
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == usItem )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
@@ -1294,8 +1307,8 @@ void SelectNextKeyOfType( UINT8 ubKeyID )
|
||||
gpItemPool = gpItemPool->pNext;
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( Item[ pObject->usItem ].usItemClass == IC_KEY && pObject->ItemData.Key.ubKeyID == ubKeyID )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( Item[ pObject->usItem ].usItemClass == IC_KEY && (*pObject)[0]->data.key.ubKeyID == ubKeyID )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1310,11 +1323,11 @@ void SelectNextKeyOfType( UINT8 ubKeyID )
|
||||
}
|
||||
while( curr )
|
||||
{ //search to the end of the list
|
||||
GetItemPool( curr->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( curr->sGridNo, &gpItemPool );
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( Item[ pObject->usItem ].usItemClass == IC_KEY && pObject->ItemData.Key.ubKeyID == ubKeyID )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( Item[ pObject->usItem ].usItemClass == IC_KEY && (*pObject)[0]->data.key.ubKeyID == ubKeyID )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1328,11 +1341,11 @@ void SelectNextKeyOfType( UINT8 ubKeyID )
|
||||
curr = pIPHead;
|
||||
while( curr )
|
||||
{ //search to the end of the list
|
||||
GetItemPool( curr->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( curr->sGridNo, &gpItemPool );
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( Item[ pObject->usItem ].usItemClass == IC_KEY && pObject->ItemData.Key.ubKeyID == ubKeyID )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( Item[ pObject->usItem ].usItemClass == IC_KEY && (*pObject)[0]->data.key.ubKeyID == ubKeyID )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1358,8 +1371,8 @@ void SelectNextTriggerWithFrequency( UINT16 usItem, INT8 bFrequency )
|
||||
gpItemPool = gpItemPool->pNext;
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( pObject->usItem == usItem && pObject->ItemData.Trigger.BombTrigger.bFrequency == bFrequency )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == usItem && (*pObject)[0]->data.misc.bFrequency == bFrequency )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1374,11 +1387,11 @@ void SelectNextTriggerWithFrequency( UINT16 usItem, INT8 bFrequency )
|
||||
}
|
||||
while( curr )
|
||||
{ //search to the end of the list
|
||||
GetItemPool( curr->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( curr->sGridNo, &gpItemPool );
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( pObject->usItem == usItem && pObject->ItemData.Trigger.BombTrigger.bFrequency == bFrequency )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == usItem && (*pObject)[0]->data.misc.bFrequency == bFrequency )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1392,11 +1405,11 @@ void SelectNextTriggerWithFrequency( UINT16 usItem, INT8 bFrequency )
|
||||
curr = pIPHead;
|
||||
while( curr )
|
||||
{ //search to the end of the list
|
||||
GetItemPool( curr->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( curr->sGridNo, &gpItemPool );
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( pObject->usItem == usItem && pObject->ItemData.Trigger.BombTrigger.bFrequency == bFrequency )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == usItem && (*pObject)[0]->data.misc.bFrequency == bFrequency )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1422,8 +1435,8 @@ void SelectNextPressureAction()
|
||||
gpItemPool = gpItemPool->pNext;
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( pObject->usItem == ACTION_ITEM && pObject->ItemData.Trigger.bDetonatorType == BOMB_PRESSURE )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == ACTION_ITEM && (*pObject)[0]->data.misc.bDetonatorType == BOMB_PRESSURE )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1438,11 +1451,11 @@ void SelectNextPressureAction()
|
||||
}
|
||||
while( curr )
|
||||
{ //search to the end of the list
|
||||
GetItemPool( curr->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( curr->sGridNo, &gpItemPool );
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( pObject->usItem == ACTION_ITEM && pObject->ItemData.Trigger.bDetonatorType == BOMB_PRESSURE )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == ACTION_ITEM && (*pObject)[0]->data.misc.bDetonatorType == BOMB_PRESSURE )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1456,11 +1469,11 @@ void SelectNextPressureAction()
|
||||
curr = pIPHead;
|
||||
while( curr )
|
||||
{ //search to the end of the list
|
||||
GetItemPool( curr->sGridNo, &gpItemPool, 0 );
|
||||
GetItemPoolFromGround( curr->sGridNo, &gpItemPool );
|
||||
while( gpItemPool )
|
||||
{
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].o;
|
||||
if( pObject->usItem == ACTION_ITEM && pObject->ItemData.Trigger.bDetonatorType == BOMB_PRESSURE )
|
||||
pObject = &gWorldItems[ gpItemPool->iItemIndex ].object;
|
||||
if( pObject->usItem == ACTION_ITEM && (*pObject)[0]->data.misc.bDetonatorType == BOMB_PRESSURE )
|
||||
{
|
||||
SpecifyItemToEdit( pObject, gWorldItems[ gpItemPool->iItemIndex ].sGridNo );
|
||||
CenterScreenAtMapIndex( gsItemGridNo );
|
||||
@@ -1481,13 +1494,13 @@ UINT16 CountNumberOfItemPlacementsInWorld( UINT16 usItem, UINT16 *pusQuantity )
|
||||
pIPCurr = pIPHead;
|
||||
while( pIPCurr )
|
||||
{
|
||||
GetItemPool( pIPCurr->sGridNo, &pItemPool, 0 );
|
||||
GetItemPoolFromGround( pIPCurr->sGridNo, &pItemPool );
|
||||
while( pItemPool )
|
||||
{
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].o.usItem == usItem )
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].object.usItem == usItem )
|
||||
{
|
||||
num++;
|
||||
*pusQuantity += gWorldItems[ pItemPool->iItemIndex ].o.ubNumberOfObjects;
|
||||
*pusQuantity += gWorldItems[ pItemPool->iItemIndex ].object.ubNumberOfObjects;
|
||||
}
|
||||
pItemPool = pItemPool->pNext;
|
||||
}
|
||||
@@ -1504,11 +1517,11 @@ UINT16 CountNumberOfItemsWithFrequency( UINT16 usItem, INT8 bFrequency )
|
||||
pIPCurr = pIPHead;
|
||||
while( pIPCurr )
|
||||
{
|
||||
GetItemPool( pIPCurr->sGridNo, &pItemPool, 0 );
|
||||
GetItemPoolFromGround( pIPCurr->sGridNo, &pItemPool );
|
||||
while( pItemPool )
|
||||
{
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].o.usItem == usItem &&
|
||||
gWorldItems[ pItemPool->iItemIndex ].o.ItemData.Trigger.BombTrigger.bFrequency == bFrequency )
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].object.usItem == usItem &&
|
||||
gWorldItems[ pItemPool->iItemIndex ].object[0]->data.misc.bFrequency == bFrequency )
|
||||
{
|
||||
num++;
|
||||
}
|
||||
@@ -1527,11 +1540,11 @@ UINT16 CountNumberOfPressureActionsInWorld()
|
||||
pIPCurr = pIPHead;
|
||||
while( pIPCurr )
|
||||
{
|
||||
GetItemPool( pIPCurr->sGridNo, &pItemPool, 0 );
|
||||
GetItemPoolFromGround( pIPCurr->sGridNo, &pItemPool );
|
||||
while( pItemPool )
|
||||
{
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].o.usItem == ACTION_ITEM &&
|
||||
gWorldItems[ pItemPool->iItemIndex ].o.ItemData.Trigger.bDetonatorType == BOMB_PRESSURE )
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].object.usItem == ACTION_ITEM &&
|
||||
gWorldItems[ pItemPool->iItemIndex ].object[0]->data.misc.bDetonatorType == BOMB_PRESSURE )
|
||||
{
|
||||
num++;
|
||||
}
|
||||
@@ -1546,7 +1559,7 @@ UINT16 CountNumberOfEditorPlacementsInWorld( UINT16 usEInfoIndex, UINT16 *pusQua
|
||||
{
|
||||
UINT16 usNumPlacements;
|
||||
if( eInfo.uiItemType == TBAR_MODE_ITEM_TRIGGERS )
|
||||
{ //find identical items with same frequency
|
||||
{ //find identical items with same frequency
|
||||
INT8 bFrequency;
|
||||
if( usEInfoIndex < PRESSURE_ACTION_ID )
|
||||
{
|
||||
@@ -1573,7 +1586,7 @@ UINT16 CountNumberOfEditorPlacementsInWorld( UINT16 usEInfoIndex, UINT16 *pusQua
|
||||
*pusQuantity = usNumPlacements;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
usNumPlacements = CountNumberOfItemPlacementsInWorld( eInfo.pusItemIndex[ usEInfoIndex], pusQuantity );
|
||||
}
|
||||
return usNumPlacements;
|
||||
@@ -1587,12 +1600,12 @@ UINT16 CountNumberOfKeysOfTypeInWorld( UINT8 ubKeyID )
|
||||
pIPCurr = pIPHead;
|
||||
while( pIPCurr )
|
||||
{
|
||||
GetItemPool( pIPCurr->sGridNo, &pItemPool, 0 );
|
||||
GetItemPoolFromGround( pIPCurr->sGridNo, &pItemPool );
|
||||
while( pItemPool )
|
||||
{
|
||||
if( Item[ gWorldItems[ pItemPool->iItemIndex ].o.usItem ].usItemClass == IC_KEY )
|
||||
if( Item[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ].usItemClass == IC_KEY )
|
||||
{
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].o.ItemData.Key.ubKeyID == ubKeyID )
|
||||
if( gWorldItems[ pItemPool->iItemIndex ].object[0]->data.key.ubKeyID == ubKeyID )
|
||||
{
|
||||
num++;
|
||||
}
|
||||
@@ -1610,15 +1623,15 @@ void DisplayItemStatistics()
|
||||
INT16 usItemIndex;
|
||||
CHAR16 pItemName[SIZE_ITEM_NAME];
|
||||
INVTYPE *pItem;
|
||||
|
||||
|
||||
if( !eInfo.fActive )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//If there is nothing else currently highlited by the mouse, use the selected item.
|
||||
fUseSelectedItem = eInfo.sHilitedItemIndex == -1 || eInfo.sHilitedItemIndex == eInfo.sSelItemIndex;
|
||||
|
||||
|
||||
SetFont( SMALLCOMPFONT );
|
||||
SetFontForeground( (UINT8)(fUseSelectedItem ? FONT_LTRED : FONT_YELLOW) );
|
||||
|
||||
@@ -1643,6 +1656,8 @@ void DisplayItemStatistics()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user