mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
* Fixing upper/lower case for includes types.h, zconf.h and zlib.h were renamed so that global includes like Types.h are not used.
3218 lines
108 KiB
C++
3218 lines
108 KiB
C++
#include "builddefines.h"
|
|
|
|
#ifdef JA2EDITOR
|
|
|
|
|
|
#include <stdio.h>
|
|
#include "types.h"
|
|
#include "Sector Summary.h"
|
|
#include "Timer Control.h"
|
|
#include "vsurface.h"
|
|
#include "Button System.h"
|
|
#include "Font Control.h"
|
|
#include "Simple Render Utils.h"
|
|
#include "Editor Taskbar Utils.h"
|
|
#include "line.h"
|
|
#include "input.h"
|
|
#include "vobject_blitters.h"
|
|
#include "LoadScreen.h"
|
|
#include "Text Input.h"
|
|
#include "mousesystem.h"
|
|
#include "strategicmap.h"
|
|
#include "FileMan.h"
|
|
#include "Exit Grids.h"
|
|
#include "Map Information.h"
|
|
#include "Summary Info.h"
|
|
#include "Animated ProgressBar.h"
|
|
#include "worlddef.h"
|
|
#include "WorldDat.h"
|
|
#include "EditorDefines.h"
|
|
#include "editscreen.h"
|
|
#include "english.h"
|
|
#include "World Items.h"
|
|
#include "Text.h"
|
|
#include "Soldier Create.h"
|
|
#include "GameVersion.h"
|
|
#include "Campaign Types.h"
|
|
#include "GameSettings.h"
|
|
#include "EditorTerrain.h"//dnl ch78 261113
|
|
#include "Render Dirty.h"//dnl ch78 271113
|
|
|
|
#include <vfs/Core/vfs.h>
|
|
#include <vfs/Core/vfs_file_raii.h>
|
|
|
|
extern BOOLEAN gfOverheadMapDirty;
|
|
|
|
#define MAP_SIZE 208
|
|
#define MAP_LEFT (iScreenWidthOffset + 417)
|
|
#define MAP_TOP (iScreenHeightOffset + 15)
|
|
#define MAP_RIGHT (MAP_LEFT+MAP_SIZE)
|
|
#define MAP_BOTTOM (MAP_TOP+MAP_SIZE)
|
|
|
|
enum{
|
|
PRE_ALPHA,
|
|
ALPHA,
|
|
DEMO,
|
|
BETA,
|
|
RELEASE
|
|
};
|
|
CHAR16 gszVersionType[5][10] = { L"Pre-Alpha", L"Alpha", L"Demo", L"Beta", L"Release" };
|
|
#define GLOBAL_SUMMARY_STATE RELEASE
|
|
|
|
//Regular masks
|
|
#define GROUND_LEVEL_MASK 0x01
|
|
#define BASEMENT1_LEVEL_MASK 0x02
|
|
#define BASEMENT2_LEVEL_MASK 0x04
|
|
#define BASEMENT3_LEVEL_MASK 0x08
|
|
#define ALL_LEVELS_MASK 0x0f
|
|
//Alternate masks
|
|
#define ALTERNATE_GROUND_MASK 0x10
|
|
#define ALTERNATE_B1_MASK 0x20
|
|
#define ALTERNATE_B2_MASK 0x40
|
|
#define ALTERNATE_B3_MASK 0x80
|
|
#define ALTERNATE_LEVELS_MASK 0xf0
|
|
|
|
void ExtractTempFilename();
|
|
|
|
INT32 giCurrLevel;
|
|
|
|
BOOLEAN gfOutdatedDenied;
|
|
UINT16 gusNumEntriesWithOutdatedOrNoSummaryInfo;
|
|
|
|
void UpdateMasterProgress();
|
|
BOOLEAN gfUpdatingNow;
|
|
UINT16 gusTotal, gusCurrent;
|
|
|
|
BOOLEAN gfMustForceUpdateAllMaps = FALSE;
|
|
UINT16 gusNumberOfMapsToBeForceUpdated = 0;
|
|
BOOLEAN gfMajorUpdate = FALSE;
|
|
|
|
BOOLEAN LoadSummary(STR8 pSector, UINT8 ubLevel, FLOAT dMajorMapVersion);//dnl ch28 240909
|
|
|
|
void RegenerateSummaryInfoForAllOutdatedMaps();
|
|
|
|
void SetupItemDetailsMode(BOOLEAN fAllowRecursion);//dnl ch81 051213
|
|
|
|
INT32 giCurrentViewLevel = ALL_LEVELS_MASK;
|
|
|
|
BOOLEAN gbSectorLevels[16][16];
|
|
BOOLEAN gfGlobalSummaryLoaded = FALSE;
|
|
|
|
SUMMARYFILE *gpSectorSummary[16][16][8] = {};
|
|
SUMMARYFILE *gpCurrentSectorSummary;
|
|
SUMMARYFILE gCustomFileSectorSummary;//dnl ch30 150909
|
|
|
|
MOUSE_REGION MapRegion;
|
|
|
|
extern INT8 gbMercSlotTypes[9];
|
|
|
|
extern void UpdateSummaryInfo( SUMMARYFILE *pSummary );
|
|
|
|
void SummaryOkayCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryToggleGridCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryToggleProgressCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryToggleLevelCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryLoadMapCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummarySaveMapCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryOverrideCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryNewGroundLevelCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryNewBasementLevelCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryNewCaveLevelCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryUpdateCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryToggleAlternateCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummarySciFiCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryRealCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void SummaryEnemyCallback( GUI_BUTTON *btn, INT32 reason );
|
|
void MapMoveCallback( MOUSE_REGION *reg, INT32 reason );
|
|
void MapClickCallback( MOUSE_REGION *reg, INT32 reason );
|
|
|
|
//Set if there is an existing global summary. The first time this is run on your computer, it
|
|
//will not exist, and will have to be generated before this will be set.
|
|
BOOLEAN gfGlobalSummaryExists;
|
|
//If you don't wish to create a global summary, you can deny it. This safely locks the system
|
|
//from generating one.
|
|
BOOLEAN gfDeniedSummaryCreation;
|
|
//Set whenever the entire display is to be marked dirty.
|
|
BOOLEAN gfRenderSummary;
|
|
//Used externally to determine if the summary window is up or not.
|
|
BOOLEAN gfSummaryWindowActive;
|
|
//When set, the summary window stays up until told otherwise. When clear, the summary will disappear
|
|
//when the assigned key (F5) is released. The latter mode is initiated when F5 is held down for longer
|
|
//than .4 seconds, and is useful for quickly looking at the information in the current map being edited.
|
|
BOOLEAN gfPersistantSummary;
|
|
//When set, a grid is overlayed on top of the sector. This grid defines each of the 256 sectors. It is
|
|
//on by default.
|
|
BOOLEAN gfRenderGrid;
|
|
//When set, parts of the map are darkened, showing that those sectors don't exist in the currently selected
|
|
//layer. When clear, the entire map is shown in full color.
|
|
BOOLEAN gfRenderProgress;
|
|
//When set, only the map section is rerendered.
|
|
|
|
extern BOOLEAN gfRenderMap; // symbol already declared globally in AI Viewer.cpp (jonathanl)
|
|
//Set whenever the ctrl key is held down. This is used in conjunction with gfFileIO to determine whether the
|
|
//selected sector is to be saved instead of loaded when clear.
|
|
BOOLEAN gfCtrlPressed;
|
|
//When set, it is time to load or save the selected sector. If gfCtrlPressed is set, the the map is saved,
|
|
//instead of loaded. It is impossible to load a map that doesn't exist.
|
|
BOOLEAN gfFileIO;
|
|
//When set, then we are overriding the ability to use normal methods for selecting sectors for saving and
|
|
//loading. Immediately upon entering the text input mode; for the temp file; then we are assuming that
|
|
//the user will type in a name that doesn't follow standard naming conventions for the purposes of the
|
|
//campaign editor. This is useful for naming a temp file for saving or loading.
|
|
BOOLEAN gfTempFile;
|
|
//When set, only the alternate version of the maps will be displayed. This is used for alternate maps in
|
|
//particular sectors, such as the SkyRider quest which could be located at one of four maps randomly. If
|
|
//that particular map is chosen, then the alternate map will be used.
|
|
BOOLEAN gfAlternateMaps = FALSE;
|
|
|
|
|
|
enum
|
|
{
|
|
ITEMMODE_SCIFI,
|
|
ITEMMODE_REAL,
|
|
ITEMMODE_ENEMY,
|
|
};
|
|
UINT8 gubSummaryItemMode = ITEMMODE_SCIFI;
|
|
|
|
BOOLEAN gfItemDetailsMode = FALSE;
|
|
|
|
WORLDITEM *gpWorldItemsSummaryArray = NULL;
|
|
UINT16 gusWorldItemsSummaryArraySize = 0;
|
|
OBJECTTYPE *gpPEnemyItemsSummaryArray = NULL;
|
|
UINT16 gusPEnemyItemsSummaryArraySize = 0;
|
|
OBJECTTYPE *gpNEnemyItemsSummaryArray = NULL;
|
|
UINT16 gusNEnemyItemsSummaryArraySize = 0;
|
|
|
|
BOOLEAN gfSetupItemDetailsMode = TRUE;
|
|
|
|
BOOLEAN gfUpdateSummaryInfo;
|
|
|
|
UINT16 usNumSummaryFilesOutOfDate;
|
|
|
|
BOOLEAN gfMapFileDirty;
|
|
|
|
//Override status. Hide is when there is nothing to override, readonly, when checked is to override a
|
|
//readonly status file, so that you can write to it, and overwrite, when checked, allows you to save,
|
|
//replacing the existing file. These states are not persistant, which forces the user to check the
|
|
//box before saving.
|
|
enum{ INACTIVE, READONLY, OVERWRITE };
|
|
UINT8 gubOverrideStatus;
|
|
//Set when the a new sector/level is selected, forcing the user to reselect the override status.
|
|
BOOLEAN gfOverrideDirty;
|
|
//The state of the override button, true if overriden intended.
|
|
BOOLEAN gfOverride;
|
|
|
|
//The sector coordinates of the map currently loaded in memory (blue)
|
|
INT16 gsSectorX, gsSectorY;
|
|
//The layer of the sector that is currently loaded in memory.
|
|
INT32 gsSectorLayer;
|
|
//The sector coordinates of the mouse position (yellow)
|
|
|
|
extern INT16 gsHiSectorX; // symbol already declared globally in AI Viewer.cpp (jonathanl)
|
|
extern INT16 gsHiSectorY; // symbol already declared globally in AI Viewer.cpp (jonathanl)
|
|
//The sector coordinates of the selected sector (red)
|
|
|
|
extern INT16 gsSelSectorX; // symbol already declared globally in AI Viewer.cpp (jonathanl)
|
|
extern INT16 gsSelSectorY; // symbol already declared globally in AI Viewer.cpp (jonathanl)
|
|
//Used to determine how long the F5 key has been held down for to determine whether or not the
|
|
//summary is going to be persistant or not.
|
|
UINT32 giInitTimer;
|
|
|
|
//dnl ch39 190909
|
|
CHAR16 gszFilename[FILENAME_BUFLEN];
|
|
CHAR16 gszTempFilename[FILENAME_BUFLEN];
|
|
CHAR16 gszDisplayName[FILENAME_BUFLEN];
|
|
|
|
void CalculateOverrideStatus();
|
|
|
|
enum{
|
|
SUMMARY_BACKGROUND,
|
|
SUMMARY_OKAY,
|
|
SUMMARY_GRIDCHECKBOX,
|
|
SUMMARY_PROGRESSCHECKBOX,
|
|
SUMMARY_ALL,
|
|
SUMMARY_G,
|
|
SUMMARY_B1,
|
|
SUMMARY_B2,
|
|
SUMMARY_B3,
|
|
SUMMARY_ALTERNATE,
|
|
SUMMARY_LOAD,
|
|
SUMMARY_SAVE,
|
|
SUMMARY_OVERRIDE,
|
|
SUMMARY_UPDATE,
|
|
SUMMARY_SCIFI,
|
|
SUMMARY_REAL,
|
|
SUMMARY_ENEMY,
|
|
NUM_SUMMARY_BUTTONS
|
|
};
|
|
INT32 iSummaryButton[ NUM_SUMMARY_BUTTONS ];
|
|
|
|
void CreateSummaryWindow()
|
|
{
|
|
INT32 i;
|
|
|
|
if( !gfGlobalSummaryLoaded )
|
|
{
|
|
LoadGlobalSummary();
|
|
gfGlobalSummaryLoaded = TRUE;
|
|
}
|
|
|
|
if( gfSummaryWindowActive )
|
|
return;
|
|
|
|
DisableEditorTaskbar();
|
|
DisableAllTextFields();
|
|
//dnl ch78 261113
|
|
HideTerrainTileButtons();
|
|
DisableEditorRegion(ITEM_REGION_ID);
|
|
RestoreBackgroundRects();
|
|
|
|
GetCurrentWorldSector( &gsSectorX, &gsSectorY );
|
|
gsSelSectorX = gsSectorX;
|
|
gsSelSectorY = gsSectorY;
|
|
gfSummaryWindowActive = TRUE;
|
|
gfPersistantSummary = FALSE;
|
|
giInitTimer = GetJA2Clock();
|
|
gfDeniedSummaryCreation = FALSE;
|
|
gfRenderSummary = TRUE;
|
|
if( gfWorldLoaded )
|
|
gfMapFileDirty = TRUE;
|
|
//Create all of the buttons here
|
|
iSummaryButton[ SUMMARY_BACKGROUND ] =
|
|
CreateTextButton( 0, 0, 0, 0, BUTTON_USE_DEFAULT, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - 120, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH - 1,
|
|
BUTTON_NO_CALLBACK, BUTTON_NO_CALLBACK );
|
|
SpecifyDisabledButtonStyle( iSummaryButton[ SUMMARY_BACKGROUND ], DISABLED_STYLE_NONE );
|
|
DisableButton( iSummaryButton[ SUMMARY_BACKGROUND ] );
|
|
|
|
iSummaryButton[ SUMMARY_OKAY ] =
|
|
CreateTextButton(pCreateSummaryWindowText[0], FONT12POINT1, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT, MAP_LEFT+160, MAP_BOTTOM+99, 50, 30, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK, SummaryOkayCallback);//dnl ch36 190909
|
|
//GiveButtonDefaultStatus( iSummaryButton[ SUMMARY_OKAY ], DEFAULT_STATUS_WINDOWS95 );
|
|
|
|
iSummaryButton[ SUMMARY_GRIDCHECKBOX ] =
|
|
CreateCheckBoxButton( MAP_LEFT, ( INT16 ) ( MAP_BOTTOM + 5 ), "EDITOR//smcheckbox.sti", MSYS_PRIORITY_HIGH, SummaryToggleGridCallback );
|
|
ButtonList[ iSummaryButton[ SUMMARY_GRIDCHECKBOX ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
gfRenderGrid = TRUE;
|
|
|
|
iSummaryButton[ SUMMARY_PROGRESSCHECKBOX ] =
|
|
CreateCheckBoxButton( ( INT16 ) ( MAP_LEFT + 50 ), ( INT16 ) ( MAP_BOTTOM + 5 ), "EDITOR//smcheckbox.sti", MSYS_PRIORITY_HIGH, SummaryToggleProgressCallback );
|
|
ButtonList[ iSummaryButton[ SUMMARY_PROGRESSCHECKBOX ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
gfRenderProgress = TRUE;
|
|
|
|
iSummaryButton[ SUMMARY_ALL ] =
|
|
CreateTextButton( pCreateSummaryWindowText[1], SMALLCOMPFONT, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
MAP_LEFT+110, MAP_BOTTOM+5, 16, 16, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK,
|
|
SummaryToggleLevelCallback );
|
|
if( giCurrentViewLevel == ALL_LEVELS_MASK || giCurrentViewLevel == ALTERNATE_LEVELS_MASK )
|
|
ButtonList[ iSummaryButton[ SUMMARY_ALL ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
iSummaryButton[ SUMMARY_G ] =
|
|
CreateTextButton( pCreateSummaryWindowText[2], SMALLCOMPFONT, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
MAP_LEFT+128, MAP_BOTTOM+5, 16, 16, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK,
|
|
SummaryToggleLevelCallback );
|
|
if( giCurrentViewLevel == GROUND_LEVEL_MASK || giCurrentViewLevel == ALTERNATE_GROUND_MASK )
|
|
ButtonList[ iSummaryButton[ SUMMARY_G ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
iSummaryButton[ SUMMARY_B1 ] =
|
|
CreateTextButton( pCreateSummaryWindowText[3], SMALLCOMPFONT, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
MAP_LEFT+146, MAP_BOTTOM+5, 16, 16, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK,
|
|
SummaryToggleLevelCallback );
|
|
if( giCurrentViewLevel == BASEMENT1_LEVEL_MASK || giCurrentViewLevel == ALTERNATE_B1_MASK )
|
|
ButtonList[ iSummaryButton[ SUMMARY_B1 ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
iSummaryButton[ SUMMARY_B2 ] =
|
|
CreateTextButton( pCreateSummaryWindowText[4], SMALLCOMPFONT, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
MAP_LEFT+164, MAP_BOTTOM+5, 16, 16, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK,
|
|
SummaryToggleLevelCallback );
|
|
if( giCurrentViewLevel == BASEMENT2_LEVEL_MASK || giCurrentViewLevel == ALTERNATE_B2_MASK )
|
|
ButtonList[ iSummaryButton[ SUMMARY_B2 ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
iSummaryButton[ SUMMARY_B3 ] =
|
|
CreateTextButton( pCreateSummaryWindowText[5], SMALLCOMPFONT, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
MAP_LEFT+182, MAP_BOTTOM+5, 16, 16, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK,
|
|
SummaryToggleLevelCallback );
|
|
if( giCurrentViewLevel == BASEMENT3_LEVEL_MASK || giCurrentViewLevel == ALTERNATE_B3_MASK )
|
|
ButtonList[ iSummaryButton[ SUMMARY_B3 ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
|
|
iSummaryButton[ SUMMARY_ALTERNATE ] =
|
|
CreateCheckBoxButton( MAP_LEFT, ( INT16 ) ( MAP_BOTTOM + 25 ), "EDITOR//smcheckbox.sti", MSYS_PRIORITY_HIGH, SummaryToggleAlternateCallback );
|
|
if( gfAlternateMaps )
|
|
ButtonList[ iSummaryButton[ SUMMARY_ALTERNATE ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
|
|
iSummaryButton[ SUMMARY_LOAD ] =
|
|
CreateTextButton( pCreateSummaryWindowText[6], FONT12POINT1, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
MAP_LEFT, MAP_BOTTOM+45, 50, 26, BUTTON_NO_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK,
|
|
SummaryLoadMapCallback );
|
|
iSummaryButton[ SUMMARY_SAVE ] =
|
|
CreateTextButton( pCreateSummaryWindowText[7], FONT12POINT1, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
MAP_LEFT+55, MAP_BOTTOM+45, 50, 26, BUTTON_NO_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK,
|
|
SummarySaveMapCallback );
|
|
iSummaryButton[ SUMMARY_OVERRIDE ] =
|
|
CreateCheckBoxButton( ( INT16 ) ( MAP_LEFT + 110 ), ( INT16 ) ( MAP_BOTTOM + 59 ), "EDITOR\\smcheckbox.sti", MSYS_PRIORITY_HIGH, SummaryOverrideCallback );
|
|
|
|
|
|
|
|
|
|
iSummaryButton[ SUMMARY_UPDATE ] =
|
|
CreateTextButton( pCreateSummaryWindowText[8], FONT12POINT1, FONT_BLACK, FONT_BLACK, BUTTON_USE_DEFAULT,
|
|
iScreenWidthOffset + 255, iScreenHeightOffset + 15, 40, 16, BUTTON_NO_TOGGLE, MSYS_PRIORITY_HIGH, DEFAULT_MOVE_CALLBACK,
|
|
SummaryUpdateCallback );
|
|
|
|
iSummaryButton[ SUMMARY_REAL ] =
|
|
CreateCheckBoxButton( iScreenWidthOffset + 350, iScreenHeightOffset + 47, "EDITOR\\radiobutton.sti", MSYS_PRIORITY_HIGH, SummaryRealCallback );
|
|
iSummaryButton[ SUMMARY_SCIFI ] =
|
|
CreateCheckBoxButton( iScreenWidthOffset + 376, iScreenHeightOffset + 47, "EDITOR\\radiobutton.sti", MSYS_PRIORITY_HIGH, SummarySciFiCallback );
|
|
iSummaryButton[ SUMMARY_ENEMY ] =
|
|
CreateCheckBoxButton( iScreenWidthOffset + 350, iScreenHeightOffset + 60, "EDITOR\\radiobutton.sti", MSYS_PRIORITY_HIGH, SummaryEnemyCallback );
|
|
|
|
//SetButtonFastHelpText( iSummaryButton[ SUMMARY_SCIFI ], L"Display items that appear in SciFi mode." );
|
|
//SetButtonFastHelpText( iSummaryButton[ SUMMARY_REAL ], L"Display items that appear in Realistic mode." );
|
|
switch( gubSummaryItemMode )
|
|
{
|
|
case ITEMMODE_SCIFI:
|
|
ButtonList[ iSummaryButton[ SUMMARY_SCIFI ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
break;
|
|
case ITEMMODE_REAL:
|
|
ButtonList[ iSummaryButton[ SUMMARY_REAL ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
break;
|
|
case ITEMMODE_ENEMY:
|
|
ButtonList[ iSummaryButton[ SUMMARY_ENEMY ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
break;
|
|
}
|
|
|
|
//Init the textinput field.
|
|
InitTextInputModeWithScheme( DEFAULT_SCHEME );
|
|
AddUserInputField( NULL ); //just so we can use short cut keys while not typing.
|
|
AddTextInputField(MAP_LEFT+110, MAP_BOTTOM+75, 100, 18, MSYS_PRIORITY_HIGH, L"", (FILENAME_BUFLEN-4-1), INPUTTYPE_EXCLUSIVE_DOSFILENAME);//dnl ch39 190909
|
|
for( i = 1; i < NUM_SUMMARY_BUTTONS; i++ )
|
|
HideButton( iSummaryButton[ i ] );
|
|
|
|
MSYS_DefineRegion( &MapRegion, MAP_LEFT, MAP_TOP, MAP_RIGHT, MAP_BOTTOM, MSYS_PRIORITY_HIGH, 0,
|
|
MapMoveCallback, MapClickCallback );
|
|
MSYS_DisableRegion( &MapRegion );
|
|
|
|
//if( gfItemDetailsMode )
|
|
// {
|
|
gfItemDetailsMode = FALSE;
|
|
// gfSetupItemDetailsMode = TRUE;
|
|
//}
|
|
if( !gfWorldLoaded )
|
|
{
|
|
gfConfirmExitFirst = FALSE;
|
|
ReleaseSummaryWindow();
|
|
DisableButton( iSummaryButton[ SUMMARY_OKAY ] );
|
|
DisableButton( iSummaryButton[ SUMMARY_SAVE ] );
|
|
}
|
|
if( gfAutoLoadA9 )
|
|
{
|
|
gfAutoLoadA9++;
|
|
gsSelSectorX = gGameExternalOptions.ubDefaultArrivalSectorX;//9;
|
|
gsSelSectorY = gGameExternalOptions.ubDefaultArrivalSectorY;//1;
|
|
//gpCurrentSectorSummary = gpSectorSummary[ 8 ][ 0 ][ 0 ];
|
|
gpCurrentSectorSummary = gpSectorSummary[ gGameExternalOptions.ubDefaultArrivalSectorX - 1 ][ gGameExternalOptions.ubDefaultArrivalSectorY - 1 ][ 0 ];
|
|
ButtonList[ iSummaryButton[ SUMMARY_LOAD ] ]->uiFlags |= BUTTON_CLICKED_ON;
|
|
}
|
|
}
|
|
|
|
void AutoLoadMap()
|
|
{
|
|
SummaryLoadMapCallback( ButtonList[ iSummaryButton[ SUMMARY_LOAD ] ], MSYS_CALLBACK_REASON_LBUTTON_UP );
|
|
ButtonList[ iSummaryButton[ SUMMARY_LOAD ] ]->uiFlags &= ~BUTTON_CLICKED_ON;//dnl ch36 210909
|
|
if( gfWorldLoaded )
|
|
DestroySummaryWindow();
|
|
gfAutoLoadA9 = FALSE;
|
|
gfConfirmExitFirst = TRUE;
|
|
}
|
|
|
|
void ReleaseSummaryWindow()
|
|
{
|
|
INT32 i;
|
|
UINT32 uiCurrTimer;
|
|
if( !gfSummaryWindowActive || gfPersistantSummary )
|
|
return;
|
|
uiCurrTimer = GetJA2Clock();
|
|
if( !gfWorldLoaded || uiCurrTimer - giInitTimer < 400 )
|
|
{ //make window persistant
|
|
for( i = 1; i < NUM_SUMMARY_BUTTONS; i++ )
|
|
ShowButton( iSummaryButton[ i ] );
|
|
HideButton( iSummaryButton[ SUMMARY_UPDATE ] );
|
|
HideButton( iSummaryButton[ SUMMARY_OVERRIDE ] );
|
|
HideButton( iSummaryButton[ SUMMARY_REAL ] );
|
|
HideButton( iSummaryButton[ SUMMARY_SCIFI ] );
|
|
HideButton( iSummaryButton[ SUMMARY_ENEMY ] );
|
|
MSYS_EnableRegion( &MapRegion );
|
|
gfPersistantSummary = TRUE;
|
|
gfOverrideDirty = TRUE;
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
else
|
|
{
|
|
DestroySummaryWindow();
|
|
}
|
|
}
|
|
|
|
void DestroySummaryWindow()
|
|
{
|
|
INT32 i;
|
|
if( !gfSummaryWindowActive )
|
|
return;
|
|
for( i = 0; i < NUM_SUMMARY_BUTTONS; i++ )
|
|
{
|
|
RemoveButton( iSummaryButton[ i ] );
|
|
}
|
|
|
|
MSYS_RemoveRegion( &MapRegion );
|
|
gfRenderTaskbar = TRUE;//dnl ch52 091009
|
|
gfSummaryWindowActive = FALSE;
|
|
gfPersistantSummary = FALSE;
|
|
MarkWorldDirty();
|
|
KillTextInputMode();
|
|
EnableEditorTaskbar();
|
|
EnableAllTextFields();
|
|
//dnl ch78 261113
|
|
if(iCurrentTaskbar == TASK_TERRAIN)
|
|
ShowTerrainTileButtons();
|
|
else if(iCurrentTaskbar == TASK_ITEMS)
|
|
EnableEditorRegion(ITEM_REGION_ID);
|
|
|
|
if( gpWorldItemsSummaryArray )
|
|
{
|
|
delete[]( gpWorldItemsSummaryArray );
|
|
gpWorldItemsSummaryArray = NULL;
|
|
gusWorldItemsSummaryArraySize = 0;
|
|
}
|
|
if( gpPEnemyItemsSummaryArray )
|
|
{
|
|
delete[]( gpPEnemyItemsSummaryArray );
|
|
gpPEnemyItemsSummaryArray = NULL;
|
|
gusPEnemyItemsSummaryArraySize = 0;
|
|
}
|
|
if( gpNEnemyItemsSummaryArray )
|
|
{
|
|
delete[]( gpNEnemyItemsSummaryArray );
|
|
gpNEnemyItemsSummaryArray = NULL;
|
|
gusNEnemyItemsSummaryArraySize = 0;
|
|
}
|
|
if( gfWorldLoaded )
|
|
{
|
|
gfConfirmExitFirst = TRUE;
|
|
}
|
|
}
|
|
|
|
void RenderSectorInformation()
|
|
{
|
|
//CHAR16 str[ 100 ];
|
|
MAPCREATE_STRUCT *m;
|
|
SUMMARYFILE *s;
|
|
UINT8 ePoints = 0;
|
|
UINT16 usLine = 35;
|
|
INT32 iOverall;
|
|
|
|
SetFont( FONT10ARIAL );
|
|
SetFontShadow( FONT_NEARBLACK );
|
|
|
|
s = gpCurrentSectorSummary;
|
|
m = &gpCurrentSectorSummary->MapInfo;
|
|
|
|
if( m->sNorthGridNo != -1 )
|
|
ePoints++;
|
|
if( m->sEastGridNo != -1 )
|
|
ePoints++;
|
|
if( m->sSouthGridNo != -1 )
|
|
ePoints++;
|
|
if( m->sWestGridNo != -1 )
|
|
ePoints++;
|
|
if( m->sCenterGridNo != -1 )
|
|
ePoints++;
|
|
if( m->sIsolatedGridNo != -1 )
|
|
ePoints++;
|
|
//start at 10,35
|
|
SetFontForeground( FONT_ORANGE );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 32, pRenderSectorInformationText[0], gTilesets[ s->ubTilesetID ].zName );
|
|
if( m->ubMapVersion < 10 )
|
|
SetFontForeground( FONT_RED );
|
|
mprintf(iScreenWidthOffset+10, iScreenHeightOffset+42, pRenderSectorInformationText[1], s->ubSummaryVersion, s->dMajorMapVersion, m->ubMapVersion);//dnl ch30 240909
|
|
SetFontForeground( FONT_GRAY2 );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 55, pRenderSectorInformationText[2], s->usNumItems );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 65, pRenderSectorInformationText[3], s->usNumLights );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 75, pRenderSectorInformationText[4], ePoints );
|
|
if( ePoints )
|
|
{
|
|
INT32 x;
|
|
x = iScreenWidthOffset + 140;
|
|
mprintf( x, iScreenHeightOffset + 75, L"(" );
|
|
x += StringPixLength( L"(", FONT10ARIAL ) + 2;
|
|
if( m->sNorthGridNo != -1 ) { mprintf( x, iScreenHeightOffset + 75, pRenderSectorInformationText[5] ); x += StringPixLength( pRenderSectorInformationText[5], FONT10ARIAL ) + 2; }
|
|
if( m->sEastGridNo != -1 ) { mprintf( x, iScreenHeightOffset + 75, pRenderSectorInformationText[6] ); x += StringPixLength( pRenderSectorInformationText[6], FONT10ARIAL ) + 2; }
|
|
if( m->sSouthGridNo != -1 ) { mprintf( x, iScreenHeightOffset + 75, pRenderSectorInformationText[7] ); x += StringPixLength( pRenderSectorInformationText[7], FONT10ARIAL ) + 2; }
|
|
if( m->sWestGridNo != -1 ) { mprintf( x, iScreenHeightOffset + 75, pRenderSectorInformationText[8] ); x += StringPixLength( pRenderSectorInformationText[8], FONT10ARIAL ) + 2; }
|
|
if( m->sCenterGridNo != -1 ) { mprintf( x, iScreenHeightOffset + 75, pRenderSectorInformationText[9] ); x += StringPixLength( pRenderSectorInformationText[9], FONT10ARIAL ) + 2; }
|
|
if( m->sIsolatedGridNo != -1 ) { mprintf( x, iScreenHeightOffset + 75, pRenderSectorInformationText[10] ); x += StringPixLength( pRenderSectorInformationText[10], FONT10ARIAL ) + 2; }
|
|
mprintf( x, iScreenHeightOffset + 75, L")" );
|
|
}
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 85, pRenderSectorInformationText[11], s->ubNumRooms );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 95, pRenderSectorInformationText[12], m->ubNumIndividuals );
|
|
mprintf( iScreenWidthOffset + 20, iScreenHeightOffset + 105, pRenderSectorInformationText[13], s->EnemyTeam.ubTotal );
|
|
mprintf( iScreenWidthOffset + 30, iScreenHeightOffset + 115, pRenderSectorInformationText[14], s->ubNumAdmins );
|
|
if( s->ubNumAdmins )
|
|
mprintf( iScreenWidthOffset + 100, iScreenHeightOffset + 115, pRenderSectorInformationText[15], s->ubAdminDetailed, s->ubAdminProfile, s->ubAdminExistance );
|
|
mprintf( iScreenWidthOffset + 30, iScreenHeightOffset + 125, pRenderSectorInformationText[16], s->ubNumTroops );
|
|
if( s->ubNumTroops )
|
|
mprintf( iScreenWidthOffset + 100, iScreenHeightOffset + 125, pRenderSectorInformationText[17], s->ubTroopDetailed, s->ubTroopProfile, s->ubTroopExistance );
|
|
mprintf( iScreenWidthOffset + 30, iScreenHeightOffset + 135, pRenderSectorInformationText[18], s->ubNumElites );
|
|
if( s->ubNumElites )
|
|
mprintf( iScreenWidthOffset + 100, iScreenHeightOffset + 135, pRenderSectorInformationText[19], s->ubEliteDetailed, s->ubEliteProfile, s->ubEliteExistance );
|
|
mprintf( iScreenWidthOffset + 20, iScreenHeightOffset + 145, pRenderSectorInformationText[20], s->CivTeam.ubTotal );
|
|
if( s->CivTeam.ubTotal )
|
|
mprintf( iScreenWidthOffset + 100, iScreenHeightOffset + 145, pRenderSectorInformationText[21], s->CivTeam.ubDetailed, s->CivTeam.ubProfile, s->CivTeam.ubExistance );
|
|
if( s->ubSummaryVersion >= 9 )
|
|
{
|
|
mprintf( iScreenWidthOffset + 30, iScreenHeightOffset + 155, pRenderSectorInformationText[22], s->CivTeam.ubTotal - s->ubCivCows - s->ubCivBloodcats );
|
|
mprintf( iScreenWidthOffset + 30, iScreenHeightOffset + 165, pRenderSectorInformationText[23], s->ubCivCows );
|
|
mprintf( iScreenWidthOffset + 30, iScreenHeightOffset + 175, pRenderSectorInformationText[24], s->ubCivBloodcats );
|
|
}
|
|
mprintf( iScreenWidthOffset + 20, iScreenHeightOffset + 185, pRenderSectorInformationText[25], s->CreatureTeam.ubTotal );
|
|
if( s->ubSummaryVersion >= 9 )
|
|
{
|
|
mprintf( iScreenWidthOffset + 30, iScreenHeightOffset + 195, pRenderSectorInformationText[26], s->CreatureTeam.ubTotal - s->CreatureTeam.ubNumAnimals );
|
|
mprintf( iScreenWidthOffset + 30, iScreenHeightOffset + 205, pRenderSectorInformationText[27], s->CreatureTeam.ubNumAnimals );
|
|
}
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 215, pRenderSectorInformationText[28], s->ubNumDoors );
|
|
mprintf( iScreenWidthOffset + 20, iScreenHeightOffset + 225, pRenderSectorInformationText[29], s->ubNumDoorsLocked );
|
|
mprintf( iScreenWidthOffset + 20, iScreenHeightOffset + 235, pRenderSectorInformationText[30], s->ubNumDoorsTrapped );
|
|
mprintf( iScreenWidthOffset + 20, iScreenHeightOffset + 245, pRenderSectorInformationText[31], s->ubNumDoorsLockedAndTrapped );
|
|
if( s->ubSummaryVersion >= 8 )
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 255, pRenderSectorInformationText[32], s->ubCivSchedules );
|
|
if( s->ubSummaryVersion >= 10 )
|
|
{
|
|
if( s->fTooManyExitGridDests )
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 265, pRenderSectorInformationText[33]);
|
|
}
|
|
else
|
|
{
|
|
UINT8 i;
|
|
UINT8 ubNumInvalid = 0;
|
|
for( i = 0; i < 4; i++ )
|
|
{
|
|
if( s->fInvalidDest[i] )
|
|
ubNumInvalid++;
|
|
}
|
|
if( ubNumInvalid )
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 265, pRenderSectorInformationText[34], s->ubNumExitGridDests, ubNumInvalid );
|
|
}
|
|
else switch( s->ubNumExitGridDests )
|
|
{
|
|
case 0:
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 265, pRenderSectorInformationText[35] );
|
|
break;
|
|
case 1:
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 265, pRenderSectorInformationText[36], s->usExitGridSize[0] );
|
|
break;
|
|
case 2:
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 265, pRenderSectorInformationText[37], s->usExitGridSize[0], s->usExitGridSize[1] );
|
|
break;
|
|
case 3:
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 265, pRenderSectorInformationText[38],
|
|
s->usExitGridSize[0], s->usExitGridSize[1], s->usExitGridSize[2] );
|
|
break;
|
|
case 4:
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 265, pRenderSectorInformationText[39],
|
|
s->usExitGridSize[0], s->usExitGridSize[1], s->usExitGridSize[2], s->usExitGridSize[3] );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
iOverall = - ( 2 * s->EnemyTeam.ubBadA ) - s->EnemyTeam.ubPoorA + s->EnemyTeam.ubGoodA + ( 2 * s->EnemyTeam.ubGreatA );
|
|
usLine = iScreenHeightOffset + 275;
|
|
mprintf( iScreenWidthOffset + 10, usLine, pRenderSectorInformationText[40],
|
|
s->EnemyTeam.ubBadA,
|
|
s->EnemyTeam.ubPoorA,
|
|
s->EnemyTeam.ubAvgA,
|
|
s->EnemyTeam.ubGoodA,
|
|
s->EnemyTeam.ubGreatA,
|
|
iOverall );
|
|
iOverall = - ( 2 * s->EnemyTeam.ubBadE ) - s->EnemyTeam.ubPoorE + s->EnemyTeam.ubGoodE + ( 2 * s->EnemyTeam.ubGreatE );
|
|
usLine += 10;
|
|
mprintf( iScreenWidthOffset + 10, usLine, pRenderSectorInformationText[41],
|
|
s->EnemyTeam.ubBadE,
|
|
s->EnemyTeam.ubPoorE,
|
|
s->EnemyTeam.ubAvgE,
|
|
s->EnemyTeam.ubGoodE,
|
|
s->EnemyTeam.ubGreatE,
|
|
iOverall );
|
|
usLine += 10;
|
|
if( s->ubSummaryVersion >= 11 )
|
|
{
|
|
if( s->ubEnemiesReqWaypoints )
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 10, usLine, pRenderSectorInformationText[42], s->ubEnemiesReqWaypoints );
|
|
usLine += 10;
|
|
}
|
|
}
|
|
if( s->ubSummaryVersion >= 13 )
|
|
{
|
|
if( s->ubEnemiesHaveWaypoints )
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 10, usLine, pRenderSectorInformationText[43], s->ubEnemiesHaveWaypoints );
|
|
usLine += 10;
|
|
}
|
|
}
|
|
if( s->ubSummaryVersion >= 12 )
|
|
{
|
|
if( s->usWarningRoomNums )
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 10, usLine, pRenderSectorInformationText[44], s->usWarningRoomNums );
|
|
}
|
|
}
|
|
}
|
|
|
|
//2) CODE TRIGGER/ACTION NAMES
|
|
void RenderItemDetails()
|
|
{
|
|
FLOAT dAvgExistChance, dAvgStatus;
|
|
OBJECTTYPE *pItem;
|
|
INT32 index, i;
|
|
CHAR16 str[100];
|
|
UINT32 uiQuantity, uiExistChance, uiStatus;
|
|
UINT32 uiTriggerQuantity[8], uiActionQuantity[8], uiTriggerExistChance[8], uiActionExistChance[8];
|
|
UINT32 xp, yp;
|
|
INT8 bFreqIndex;
|
|
SetFont( FONT10ARIAL );
|
|
SetFontForeground( FONT_GRAY2 );
|
|
SetFontShadow( FONT_NEARBLACK );
|
|
mprintf( iScreenWidthOffset + 364, iScreenHeightOffset + 49, pRenderItemDetailsText[0] );
|
|
mprintf( iScreenWidthOffset + 390, iScreenHeightOffset + 49, pRenderItemDetailsText[1] );
|
|
mprintf( iScreenWidthOffset + 364, iScreenHeightOffset + 62, pRenderItemDetailsText[2] );
|
|
|
|
xp = iScreenWidthOffset + 5;
|
|
yp = iScreenHeightOffset + 20;
|
|
|
|
if( gubSummaryItemMode != ITEMMODE_ENEMY && gpWorldItemsSummaryArray )
|
|
{
|
|
memset( uiTriggerQuantity, 0, 32 );
|
|
memset( uiActionQuantity, 0, 32 );
|
|
memset( uiTriggerExistChance, 0, 32 );
|
|
memset( uiActionExistChance, 0, 32 );
|
|
for( index = 1; index < MAXITEMS; index++ )
|
|
{
|
|
if ( Item[index].usItemClass == 0 )
|
|
break;
|
|
uiQuantity = 0;
|
|
uiExistChance = 0;
|
|
uiStatus = 0;
|
|
for( i = 0; i < gusWorldItemsSummaryArraySize; i++ )
|
|
{
|
|
if( index == SWITCH || index == ACTION_ITEM )
|
|
{
|
|
if( gpWorldItemsSummaryArray[ i ].object.usItem == index )
|
|
{
|
|
if( gubSummaryItemMode == ITEMMODE_SCIFI && !(gpWorldItemsSummaryArray[ i ].usFlags & WORLD_ITEM_REALISTIC_ONLY) ||
|
|
gubSummaryItemMode == ITEMMODE_REAL && !(gpWorldItemsSummaryArray[ i ].usFlags & WORLD_ITEM_SCIFI_ONLY) )
|
|
{
|
|
pItem = &gpWorldItemsSummaryArray[ i ].object;
|
|
if( !(*pItem)[0]->data.misc.bFrequency )
|
|
bFreqIndex = 7;
|
|
else if( (*pItem)[0]->data.misc.bFrequency == PANIC_FREQUENCY )
|
|
bFreqIndex = 0;
|
|
else if( (*pItem)[0]->data.misc.bFrequency == PANIC_FREQUENCY_2 )
|
|
bFreqIndex = 1;
|
|
else if( (*pItem)[0]->data.misc.bFrequency == PANIC_FREQUENCY_3 )
|
|
bFreqIndex = 2;
|
|
else if( (*pItem)[0]->data.misc.bFrequency == FIRST_MAP_PLACED_FREQUENCY + 1 )
|
|
bFreqIndex = 3;
|
|
else if( (*pItem)[0]->data.misc.bFrequency == FIRST_MAP_PLACED_FREQUENCY + 2 )
|
|
bFreqIndex = 4;
|
|
else if( (*pItem)[0]->data.misc.bFrequency == FIRST_MAP_PLACED_FREQUENCY + 3 )
|
|
bFreqIndex = 5;
|
|
else if( (*pItem)[0]->data.misc.bFrequency == FIRST_MAP_PLACED_FREQUENCY + 4 )
|
|
bFreqIndex = 6;
|
|
else
|
|
continue;
|
|
if( index == SWITCH )
|
|
{
|
|
uiTriggerQuantity[ bFreqIndex ]++;
|
|
uiTriggerExistChance[ bFreqIndex ] += 100 - gpWorldItemsSummaryArray[ i ].ubNonExistChance;
|
|
}
|
|
else
|
|
{
|
|
uiActionQuantity[ bFreqIndex ]++;
|
|
uiActionExistChance[ bFreqIndex ] += 100 - gpWorldItemsSummaryArray[ i ].ubNonExistChance;
|
|
}
|
|
}
|
|
}
|
|
continue;
|
|
}
|
|
if( gpWorldItemsSummaryArray[ i ].object.usItem == index )
|
|
{
|
|
if( gubSummaryItemMode == ITEMMODE_SCIFI && !(gpWorldItemsSummaryArray[ i ].usFlags & WORLD_ITEM_REALISTIC_ONLY) ||
|
|
gubSummaryItemMode == ITEMMODE_REAL && !(gpWorldItemsSummaryArray[ i ].usFlags & WORLD_ITEM_SCIFI_ONLY) )
|
|
{
|
|
pItem = &gpWorldItemsSummaryArray[ i ].object;
|
|
uiExistChance += (100 - gpWorldItemsSummaryArray[ i ].ubNonExistChance) * pItem->ubNumberOfObjects;
|
|
uiStatus += (*pItem)[0]->data.objectStatus;
|
|
uiQuantity += pItem->ubNumberOfObjects;
|
|
}
|
|
}
|
|
}
|
|
if( uiQuantity )
|
|
{
|
|
if( !(yp % 20) )
|
|
SetFontForeground( FONT_LTKHAKI );
|
|
else
|
|
SetFontForeground( FONT_GRAY2 );
|
|
//calc averages
|
|
dAvgExistChance = (FLOAT)(uiExistChance / 100.0);
|
|
dAvgStatus = uiStatus / (FLOAT)uiQuantity;
|
|
//Display stats.
|
|
LoadShortNameItemInfo( (UINT16)index, str );
|
|
mprintf( xp, yp, L"%s", str );
|
|
mprintf( xp + 85, yp, L"%3.02f", dAvgExistChance );
|
|
mprintf( xp + 110, yp, L"@ %3.02f%%", dAvgStatus );
|
|
yp += 10;
|
|
if( yp >= (UINT32)(iScreenHeightOffset + 355 ))
|
|
{
|
|
xp += 170;
|
|
yp = iScreenHeightOffset + 20;
|
|
if( xp >= (UINT32)(iScreenWidthOffset + 300 ))
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 350, iScreenHeightOffset + 350, pRenderItemDetailsText[3]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//Now list the number of actions/triggers of each type
|
|
for( i = 0; i < 8; i++ )
|
|
{
|
|
if( uiTriggerQuantity[i] || uiActionQuantity[i] )
|
|
{
|
|
if( i == 7 )
|
|
SetFontForeground( FONT_DKYELLOW );
|
|
else if( !uiTriggerQuantity[i] || !uiActionQuantity[i] )
|
|
SetFontForeground( FONT_RED );
|
|
else
|
|
SetFontForeground( 77 );
|
|
switch( i )
|
|
{
|
|
case 0: swprintf( str, pRenderItemDetailsText[4] ); break;
|
|
case 1: swprintf( str, pRenderItemDetailsText[5] ); break;
|
|
case 2: swprintf( str, pRenderItemDetailsText[6] ); break;
|
|
case 3: swprintf( str, pRenderItemDetailsText[7] ); break;
|
|
case 4: swprintf( str, pRenderItemDetailsText[8] ); break;
|
|
case 5: swprintf( str, pRenderItemDetailsText[9] ); break;
|
|
case 6: swprintf( str, pRenderItemDetailsText[10] ); break;
|
|
case 7: swprintf( str, pRenderItemDetailsText[11] ); break;
|
|
}
|
|
if( i < 7 )
|
|
{
|
|
dAvgExistChance = (FLOAT)(uiTriggerExistChance[i] / 100.0);
|
|
dAvgStatus = (FLOAT)(uiActionExistChance[i] / 100.0);
|
|
mprintf( xp, yp, L"%s: %3.02f trigger(s), %3.02f action(s)", str, dAvgExistChance, dAvgStatus );
|
|
}
|
|
else
|
|
{
|
|
dAvgExistChance = (FLOAT)(uiActionExistChance[i] / 100.0);
|
|
mprintf( xp, yp, L"%s: %3.02f", str, dAvgExistChance );
|
|
}
|
|
yp += 10;
|
|
if( yp >= (UINT32)(iScreenHeightOffset + 355 ))
|
|
{
|
|
xp += 170;
|
|
yp = iScreenHeightOffset + 20;
|
|
if( xp >= (UINT32)(iScreenWidthOffset + 300 ))
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 350, iScreenHeightOffset + 350, pRenderItemDetailsText[12]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if( gubSummaryItemMode == ITEMMODE_ENEMY )
|
|
{
|
|
|
|
SetFontForeground( FONT_YELLOW );
|
|
mprintf( xp, yp, pRenderItemDetailsText[13] );
|
|
yp += 10;
|
|
|
|
//Do the priority existance guys first
|
|
if( !gpPEnemyItemsSummaryArray )
|
|
{
|
|
SetFontForeground( FONT_DKYELLOW );
|
|
mprintf( xp, yp, pRenderItemDetailsText[14] );
|
|
yp += 10;
|
|
}
|
|
else for( index = 1; index < MAXITEMS; index++ )
|
|
{
|
|
if ( Item[index].usItemClass == 0 )
|
|
break;
|
|
uiQuantity = 0;
|
|
uiExistChance = 0;
|
|
uiStatus = 0;
|
|
for( i = 0; i < gusPEnemyItemsSummaryArraySize; i++ )
|
|
{
|
|
if( gpPEnemyItemsSummaryArray[ i ].usItem == index )
|
|
{
|
|
pItem = &gpPEnemyItemsSummaryArray[ i ];
|
|
uiExistChance += 100 * pItem->ubNumberOfObjects;
|
|
uiStatus += (*pItem)[0]->data.objectStatus;
|
|
uiQuantity += pItem->ubNumberOfObjects;
|
|
}
|
|
}
|
|
if( uiQuantity )
|
|
{
|
|
if( !(yp % 20) )
|
|
SetFontForeground( FONT_LTKHAKI );
|
|
else
|
|
SetFontForeground( FONT_GRAY2 );
|
|
//calc averages
|
|
dAvgExistChance = (FLOAT)(uiExistChance / 100.0);
|
|
dAvgStatus = uiStatus / (FLOAT)uiQuantity;
|
|
//Display stats.
|
|
LoadShortNameItemInfo( (UINT16)index, str );
|
|
mprintf( xp, yp, L"%s", str );
|
|
mprintf( xp + 85, yp, L"%3.02f", dAvgExistChance );
|
|
mprintf( xp + 110, yp, L"@ %3.02f%%", dAvgStatus );
|
|
yp += 10;
|
|
if( yp >= (UINT32)(iScreenHeightOffset + 355 ))
|
|
{
|
|
xp += 170;
|
|
|
|
yp = (iScreenHeightOffset + 20);
|
|
|
|
if( xp >= (UINT32)(iScreenWidthOffset + 300 ))
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 350, iScreenHeightOffset + 350, pRenderItemDetailsText[15] );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
yp += 5;
|
|
|
|
SetFontForeground( FONT_YELLOW );
|
|
mprintf( xp, yp, pRenderItemDetailsText[16] );
|
|
yp += 10;
|
|
if( yp >= (UINT32)(iScreenHeightOffset + 355 ))
|
|
{
|
|
xp += 170;
|
|
yp = (iScreenHeightOffset + 20);
|
|
if( xp >= (UINT32)(iScreenWidthOffset + 300 ))
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 350, iScreenHeightOffset + 350, pRenderItemDetailsText[17] );
|
|
return;
|
|
}
|
|
}
|
|
|
|
//Do the priority existance guys first
|
|
if( !gpNEnemyItemsSummaryArray )
|
|
{
|
|
SetFontForeground( FONT_DKYELLOW );
|
|
mprintf( xp, yp, pRenderItemDetailsText[18] );
|
|
yp += 10;
|
|
}
|
|
for( index = 1; index < MAXITEMS; index++ )
|
|
{
|
|
if ( Item[index].usItemClass == 0 )
|
|
break;
|
|
uiQuantity = 0;
|
|
uiExistChance = 0;
|
|
uiStatus = 0;
|
|
for( i = 0; i < gusNEnemyItemsSummaryArraySize; i++ )
|
|
{
|
|
if( gpNEnemyItemsSummaryArray[ i ].usItem == index )
|
|
{
|
|
pItem = &gpNEnemyItemsSummaryArray[ i ];
|
|
uiExistChance += 100 * pItem->ubNumberOfObjects;
|
|
uiStatus += (*pItem)[0]->data.objectStatus;
|
|
uiQuantity += pItem->ubNumberOfObjects;
|
|
}
|
|
}
|
|
if( uiQuantity )
|
|
{
|
|
if( !(yp % 20) )
|
|
SetFontForeground( FONT_LTKHAKI );
|
|
else
|
|
SetFontForeground( FONT_GRAY2 );
|
|
//calc averages
|
|
dAvgExistChance = (FLOAT)(uiExistChance / 100.0);
|
|
dAvgStatus = uiStatus / (FLOAT)uiQuantity;
|
|
//Display stats.
|
|
LoadShortNameItemInfo( (UINT16)index, str );
|
|
mprintf( xp, yp, L"%s", str );
|
|
mprintf( xp + 85, yp, L"%3.02f", dAvgExistChance );
|
|
mprintf( xp + 110, yp, L"@ %3.02f%%", dAvgStatus );
|
|
yp += 10;
|
|
if( yp >= (UINT32)(iScreenHeightOffset + 355 ))
|
|
{
|
|
xp += 170;
|
|
yp = iScreenHeightOffset + 20;
|
|
if( xp >= (UINT32)(iScreenWidthOffset + 300 ))
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 350, iScreenHeightOffset + 350, pRenderItemDetailsText[19] );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
mprintf( iScreenWidthOffset + 5, iScreenHeightOffset + 50, pRenderItemDetailsText[20] );
|
|
}
|
|
}
|
|
|
|
void RenderSummaryWindow()
|
|
{
|
|
UINT8 *pDestBuf;
|
|
UINT32 uiDestPitchBYTES;
|
|
SGPRect ClipRect;
|
|
INT32 i, x, y;
|
|
if( (GetActiveFieldID() == 1 ) != gfTempFile )
|
|
{
|
|
gfTempFile ^= 1;
|
|
SetInputFieldStringWith16BitString( 1, L"" );
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
if( gfTempFile ) //constantly extract the temp filename for updating purposes.
|
|
ExtractTempFilename();
|
|
if( gfRenderSummary )
|
|
{
|
|
gfRenderSummary = FALSE;
|
|
gfRenderMap = TRUE;
|
|
for( i = 1; i < NUM_SUMMARY_BUTTONS; i++ )
|
|
{
|
|
MarkAButtonDirty( iSummaryButton[ i ] );
|
|
}
|
|
|
|
DrawButton( iSummaryButton[ SUMMARY_BACKGROUND ] );
|
|
InvalidateRegion( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - 120 );
|
|
|
|
SetFont( BLOCKFONT2 );
|
|
SetFontForeground( FONT_LTKHAKI );
|
|
SetFontShadow( FONT_DKKHAKI );
|
|
SetFontBackground( 0 );
|
|
if( !gfItemDetailsMode )
|
|
{
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 5, pRenderSummaryWindowText[0],
|
|
gszVersionType[ GLOBAL_SUMMARY_STATE ], GLOBAL_SUMMARY_VERSION );
|
|
}
|
|
|
|
//This section builds the proper header to be displayed for an existing global summary.
|
|
if( !gfWorldLoaded )
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
SetFontShadow( FONT_NEARBLACK );
|
|
mprintf( iScreenWidthOffset + 270, iScreenHeightOffset + 5, pRenderSummaryWindowText[1]);
|
|
}
|
|
SetFont( FONT10ARIAL );
|
|
SetFontShadow( FONT_NEARBLACK );
|
|
if( gfGlobalSummaryExists )
|
|
{
|
|
CHAR16 str[100];
|
|
BOOLEAN fSectorSummaryExists = FALSE;
|
|
if( gusNumEntriesWithOutdatedOrNoSummaryInfo && !gfOutdatedDenied )
|
|
{
|
|
DisableButton( iSummaryButton[ SUMMARY_LOAD ] );
|
|
SetFontForeground( FONT_YELLOW );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 20, pRenderSummaryWindowText[2], gusNumEntriesWithOutdatedOrNoSummaryInfo);
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 30, pRenderSummaryWindowText[3]);
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 40, pRenderSummaryWindowText[4]);
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 50, pRenderSummaryWindowText[5]);
|
|
SetFontForeground( FONT_LTRED );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 65, pRenderSummaryWindowText[6] );
|
|
}
|
|
else if( !gsSelSectorX && !gsSectorX || gfTempFile )
|
|
{
|
|
DisableButton( iSummaryButton[ SUMMARY_LOAD ] );
|
|
SetFontForeground( FONT_LTRED );
|
|
if( !gfItemDetailsMode )//dnl ch81 031213
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 20, pRenderSummaryWindowText[7] );
|
|
if( gfTempFile )
|
|
{
|
|
SetFontForeground( FONT_YELLOW );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 30, pRenderSummaryWindowText[8] );
|
|
goto SPECIALCASE_LABEL; //OUCH!!!
|
|
}
|
|
else if( !gfWorldLoaded )
|
|
{
|
|
SetFontForeground( FONT_YELLOW );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 30, pRenderSummaryWindowText[9] );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 40, pRenderSummaryWindowText[10] );
|
|
}
|
|
else if(gCustomFileSectorSummary.ubSummaryVersion)//dnl ch30 150909 //dnl ch81 031213
|
|
{
|
|
gpCurrentSectorSummary = &gCustomFileSectorSummary;
|
|
wcscpy(gszFilename, gzFilename);
|
|
wcscpy(gszDisplayName, gszFilename);
|
|
if(gfItemDetailsMode)
|
|
{
|
|
SetupItemDetailsMode(TRUE);
|
|
SetFontForeground(FONT_YELLOW);
|
|
mprintf(iScreenWidthOffset+10, iScreenHeightOffset+5, pRenderSummaryWindowText[19], gszDisplayName);
|
|
RenderItemDetails();
|
|
}
|
|
else
|
|
{
|
|
HideButton(iSummaryButton[SUMMARY_REAL]);
|
|
HideButton(iSummaryButton[SUMMARY_SCIFI]);
|
|
HideButton(iSummaryButton[SUMMARY_ENEMY]);
|
|
RenderSectorInformation();
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//Build sector string
|
|
if( gsSelSectorX )
|
|
x = gsSelSectorX - 1, y = gsSelSectorY - 1;
|
|
else
|
|
x = gsSectorX - 1, y = gsSectorY - 1;
|
|
swprintf( str, L"%c%d", y + 'A', x + 1 );
|
|
swprintf( gszFilename, str );
|
|
giCurrLevel = giCurrentViewLevel;
|
|
switch( giCurrentViewLevel )
|
|
{
|
|
case ALL_LEVELS_MASK:
|
|
//search for the highest level
|
|
fSectorSummaryExists = TRUE;
|
|
if( gbSectorLevels[x][y] & GROUND_LEVEL_MASK )
|
|
giCurrLevel = GROUND_LEVEL_MASK;
|
|
else if( gbSectorLevels[x][y] & BASEMENT1_LEVEL_MASK )
|
|
giCurrLevel = BASEMENT1_LEVEL_MASK;
|
|
else if( gbSectorLevels[x][y] & BASEMENT2_LEVEL_MASK )
|
|
giCurrLevel = BASEMENT2_LEVEL_MASK;
|
|
else if( gbSectorLevels[x][y] & BASEMENT3_LEVEL_MASK )
|
|
giCurrLevel = BASEMENT3_LEVEL_MASK;
|
|
else
|
|
fSectorSummaryExists = FALSE;
|
|
break;
|
|
case ALTERNATE_LEVELS_MASK:
|
|
//search for the highest alternate level
|
|
fSectorSummaryExists = TRUE;
|
|
if( gbSectorLevels[x][y] & ALTERNATE_GROUND_MASK )
|
|
giCurrLevel = ALTERNATE_GROUND_MASK;
|
|
else if( gbSectorLevels[x][y] & ALTERNATE_B1_MASK )
|
|
giCurrLevel = ALTERNATE_B1_MASK;
|
|
else if( gbSectorLevels[x][y] & ALTERNATE_B2_MASK )
|
|
giCurrLevel = ALTERNATE_B2_MASK;
|
|
else if( gbSectorLevels[x][y] & ALTERNATE_B3_MASK )
|
|
giCurrLevel = ALTERNATE_B3_MASK;
|
|
else
|
|
fSectorSummaryExists = FALSE;
|
|
break;
|
|
case GROUND_LEVEL_MASK:
|
|
if( gbSectorLevels[x][y] & GROUND_LEVEL_MASK )
|
|
fSectorSummaryExists = TRUE;
|
|
break;
|
|
case BASEMENT1_LEVEL_MASK:
|
|
if( gbSectorLevels[x][y] & BASEMENT1_LEVEL_MASK )
|
|
fSectorSummaryExists = TRUE;
|
|
break;
|
|
case BASEMENT2_LEVEL_MASK:
|
|
if( gbSectorLevels[x][y] & BASEMENT2_LEVEL_MASK )
|
|
fSectorSummaryExists = TRUE;
|
|
break;
|
|
case BASEMENT3_LEVEL_MASK:
|
|
if( gbSectorLevels[x][y] & BASEMENT3_LEVEL_MASK )
|
|
fSectorSummaryExists = TRUE;
|
|
break;
|
|
case ALTERNATE_GROUND_MASK:
|
|
if( gbSectorLevels[x][y] & ALTERNATE_GROUND_MASK )
|
|
fSectorSummaryExists = TRUE;
|
|
break;
|
|
case ALTERNATE_B1_MASK:
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B1_MASK )
|
|
fSectorSummaryExists = TRUE;
|
|
break;
|
|
case ALTERNATE_B2_MASK:
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B2_MASK )
|
|
fSectorSummaryExists = TRUE;
|
|
break;
|
|
case ALTERNATE_B3_MASK:
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B3_MASK )
|
|
fSectorSummaryExists = TRUE;
|
|
break;
|
|
}
|
|
if( gbSectorLevels[x][y] )
|
|
{
|
|
switch( giCurrLevel )
|
|
{
|
|
case GROUND_LEVEL_MASK:
|
|
giCurrLevel = 0;
|
|
wcscat( str, pRenderSummaryWindowText[11] );
|
|
gpCurrentSectorSummary = gpSectorSummary[x][y][0];
|
|
break;
|
|
case BASEMENT1_LEVEL_MASK:
|
|
giCurrLevel = 1;
|
|
wcscat( str, pRenderSummaryWindowText[12] );
|
|
gpCurrentSectorSummary = gpSectorSummary[x][y][1];
|
|
break;
|
|
case BASEMENT2_LEVEL_MASK:
|
|
giCurrLevel = 2;
|
|
wcscat( str, pRenderSummaryWindowText[13] );
|
|
gpCurrentSectorSummary = gpSectorSummary[x][y][2];
|
|
break;
|
|
case BASEMENT3_LEVEL_MASK:
|
|
giCurrLevel = 3;
|
|
wcscat( str, pRenderSummaryWindowText[14] );
|
|
gpCurrentSectorSummary = gpSectorSummary[x][y][3];
|
|
break;
|
|
case ALTERNATE_GROUND_MASK:
|
|
giCurrLevel = 4;
|
|
wcscat( str, pRenderSummaryWindowText[15] );
|
|
gpCurrentSectorSummary = gpSectorSummary[x][y][4];
|
|
break;
|
|
case ALTERNATE_B1_MASK:
|
|
giCurrLevel = 5;
|
|
wcscat( str, pRenderSummaryWindowText[16] );
|
|
gpCurrentSectorSummary = gpSectorSummary[x][y][5];
|
|
break;
|
|
case ALTERNATE_B2_MASK:
|
|
giCurrLevel = 6;
|
|
wcscat( str, pRenderSummaryWindowText[17] );
|
|
gpCurrentSectorSummary = gpSectorSummary[x][y][6];
|
|
break;
|
|
case ALTERNATE_B3_MASK:
|
|
giCurrLevel = 7;
|
|
wcscat( str, pRenderSummaryWindowText[18] );
|
|
gpCurrentSectorSummary = gpSectorSummary[x][y][7];
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DisableButton( iSummaryButton[ SUMMARY_LOAD ] );
|
|
}
|
|
if( fSectorSummaryExists )
|
|
{
|
|
switch( giCurrLevel )
|
|
{
|
|
case 0: wcscat( gszFilename, L".dat" ); break;
|
|
case 1: wcscat( gszFilename, L"_b1.dat" ); break;
|
|
case 2: wcscat( gszFilename, L"_b2.dat" ); break;
|
|
case 3: wcscat( gszFilename, L"_b3.dat" ); break;
|
|
case 4: wcscat( gszFilename, L"_a.dat" ); break;
|
|
case 5: wcscat( gszFilename, L"_b1_a.dat" ); break;
|
|
case 6: wcscat( gszFilename, L"_b2_a.dat" ); break;
|
|
case 7: wcscat( gszFilename, L"_b3_a.dat" ); break;
|
|
}
|
|
swprintf( gszDisplayName, gszFilename );
|
|
EnableButton( iSummaryButton[ SUMMARY_LOAD ] );
|
|
if( gpCurrentSectorSummary )
|
|
{
|
|
if( gpCurrentSectorSummary->ubSummaryVersion < GLOBAL_SUMMARY_VERSION )
|
|
ShowButton( iSummaryButton[ SUMMARY_UPDATE ] );
|
|
else
|
|
HideButton( iSummaryButton[ SUMMARY_UPDATE ] );
|
|
if( !gfAlternateMaps )
|
|
SetFontForeground( FONT_YELLOW );
|
|
else
|
|
SetFontForeground( FONT_LTBLUE );
|
|
if( gfItemDetailsMode )
|
|
{
|
|
if( gfSetupItemDetailsMode )
|
|
{
|
|
SetupItemDetailsMode( TRUE );
|
|
gfSetupItemDetailsMode = FALSE;
|
|
}
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 5, pRenderSummaryWindowText[19], str );
|
|
RenderItemDetails();
|
|
}
|
|
else
|
|
{
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 20, pRenderSummaryWindowText[20], str );
|
|
HideButton( iSummaryButton[ SUMMARY_REAL ] );
|
|
HideButton( iSummaryButton[ SUMMARY_SCIFI ] );
|
|
HideButton( iSummaryButton[ SUMMARY_ENEMY ] );
|
|
RenderSectorInformation();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
if( gfItemDetailsMode )
|
|
{
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 5, pRenderSummaryWindowText[21] , str );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 15, pRenderSummaryWindowText[22] );
|
|
}
|
|
else
|
|
{
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 20, pRenderSummaryWindowText[23] , str );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 30, pRenderSummaryWindowText[24] );
|
|
}
|
|
ShowButton( iSummaryButton[ SUMMARY_UPDATE ] );
|
|
//dnl ch81 041213
|
|
HideButton(iSummaryButton[SUMMARY_REAL]);
|
|
HideButton(iSummaryButton[SUMMARY_SCIFI]);
|
|
HideButton(iSummaryButton[SUMMARY_ENEMY]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( !gfAlternateMaps )
|
|
SetFontForeground( FONT_ORANGE );
|
|
else
|
|
{
|
|
SetFontForeground( FONT_DKBLUE );
|
|
SetFontShadow( 0 );
|
|
}
|
|
if( gfItemDetailsMode )
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 5, pRenderSummaryWindowText[25], str );
|
|
else
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 20, pRenderSummaryWindowText[26], str );
|
|
SetFontShadow( FONT_NEARBLACK );
|
|
|
|
switch( giCurrentViewLevel )
|
|
{
|
|
case ALL_LEVELS_MASK:
|
|
case GROUND_LEVEL_MASK: wcscat( gszFilename, L".dat" ); break;
|
|
case BASEMENT1_LEVEL_MASK: wcscat( gszFilename, L"_b1.dat" ); break;
|
|
case BASEMENT2_LEVEL_MASK: wcscat( gszFilename, L"_b2.dat" ); break;
|
|
case BASEMENT3_LEVEL_MASK: wcscat( gszFilename, L"_b3.dat" ); break;
|
|
case ALTERNATE_LEVELS_MASK:
|
|
case ALTERNATE_GROUND_MASK: wcscat( gszFilename, L"_a.dat" ); break;
|
|
case ALTERNATE_B1_MASK: wcscat( gszFilename, L"_b1_a.dat" ); break;
|
|
case ALTERNATE_B2_MASK: wcscat( gszFilename, L"_b2_a.dat" ); break;
|
|
case ALTERNATE_B3_MASK: wcscat( gszFilename, L"_b3_a.dat" ); break;
|
|
}
|
|
swprintf( gszDisplayName, gszFilename );
|
|
DisableButton( iSummaryButton[ SUMMARY_LOAD ] );
|
|
//dnl ch81 031213
|
|
HideButton(iSummaryButton[SUMMARY_UPDATE]);
|
|
HideButton(iSummaryButton[SUMMARY_REAL]);
|
|
HideButton(iSummaryButton[SUMMARY_SCIFI]);
|
|
HideButton(iSummaryButton[SUMMARY_ENEMY]);
|
|
}
|
|
SPECIALCASE_LABEL:
|
|
if( gfOverrideDirty && gfPersistantSummary )
|
|
CalculateOverrideStatus();
|
|
if( gubOverrideStatus == INACTIVE )
|
|
{
|
|
if( !gfAlternateMaps )
|
|
SetFontForeground( FONT_LTKHAKI );
|
|
else
|
|
SetFontForeground( FONT_LTBLUE );
|
|
mprintf( MAP_LEFT+110, MAP_BOTTOM+55, pRenderSummaryWindowText[27], gszDisplayName );
|
|
}
|
|
else //little higher to make room for the override checkbox and text.
|
|
{
|
|
if( !gfAlternateMaps )
|
|
SetFontForeground( FONT_LTKHAKI );
|
|
else
|
|
SetFontForeground( FONT_LTBLUE );
|
|
mprintf( MAP_LEFT+110, MAP_BOTTOM+46, pRenderSummaryWindowText[28], gszDisplayName );
|
|
if( gubOverrideStatus == READONLY )
|
|
{
|
|
SetFontForeground( (UINT8)(gfOverride ? FONT_YELLOW : FONT_LTRED) );
|
|
mprintf( MAP_LEFT+124, MAP_BOTTOM+61, pRenderSummaryWindowText[29] );
|
|
}
|
|
else
|
|
{
|
|
SetFontForeground( (UINT8)(gfOverride ? FONT_YELLOW: FONT_ORANGE ) );
|
|
mprintf( MAP_LEFT+124, MAP_BOTTOM+61, pRenderSummaryWindowText[30]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if( !gfDeniedSummaryCreation )
|
|
{
|
|
SetFontForeground( FONT_GRAY1 );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 20, pRenderSummaryWindowText[31] );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 30, pRenderSummaryWindowText[32] );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 40, pRenderSummaryWindowText[33] );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 50, pRenderSummaryWindowText[34] );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 60, pRenderSummaryWindowText[35] );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 70, pRenderSummaryWindowText[36] );
|
|
SetFontForeground( FONT_LTRED );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 85, pRenderSummaryWindowText[37] );
|
|
}
|
|
else
|
|
{
|
|
SetFontForeground( FONT_LTRED );
|
|
mprintf( iScreenWidthOffset + 10, iScreenHeightOffset + 20, pRenderSummaryWindowText[38] );
|
|
}
|
|
|
|
SetFont( FONT10ARIAL );
|
|
SetFontForeground( FONT_GRAY3 );
|
|
mprintf( MAP_LEFT + 15, MAP_BOTTOM + 7, pRenderSummaryWindowText[39] );
|
|
mprintf( MAP_LEFT + 65, MAP_BOTTOM + 7,pRenderSummaryWindowText[40] );
|
|
mprintf( MAP_LEFT + 15, MAP_BOTTOM + 27, pRenderSummaryWindowText[41] );
|
|
//Draw the mode tabs
|
|
SetFontForeground( FONT_YELLOW );
|
|
mprintf( iScreenWidthOffset + 354, iScreenHeightOffset + 18, pRenderSummaryWindowText[42] );
|
|
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
|
|
SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
RectangleDraw( TRUE, iScreenWidthOffset + 350, iScreenHeightOffset + 15, iScreenWidthOffset + 405, iScreenHeightOffset + 28, 0, pDestBuf );
|
|
UnLockVideoSurface( FRAME_BUFFER );
|
|
ShadowVideoSurfaceRectUsingLowPercentTable( FRAME_BUFFER, iScreenWidthOffset + 351, iScreenHeightOffset + 16, iScreenWidthOffset + 404, iScreenHeightOffset + 27 );
|
|
if( gpCurrentSectorSummary )
|
|
/*&& gpCurrentSectorSummary->usNumItems ||
|
|
gpPEnemyItemsSummaryArray && gusPEnemyItemsSummaryArraySize ||
|
|
gpNEnemyItemsSummaryArray && gusNEnemyItemsSummaryArraySize )*/
|
|
{
|
|
SetFontForeground( FONT_YELLOW );
|
|
}
|
|
else
|
|
{
|
|
SetFontForeground( FONT_RED );
|
|
}
|
|
mprintf( iScreenWidthOffset + 354, iScreenHeightOffset + 33, pRenderSummaryWindowText[43] );
|
|
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
|
|
SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
RectangleDraw( TRUE, iScreenWidthOffset + 350, iScreenHeightOffset + 30, iScreenWidthOffset + 405, iScreenHeightOffset + 43, 0, pDestBuf );
|
|
UnLockVideoSurface( FRAME_BUFFER );
|
|
if( gpCurrentSectorSummary )
|
|
/*&& gpCurrentSectorSummary->usNumItems ||
|
|
gpPEnemyItemsSummaryArray && gusPEnemyItemsSummaryArraySize ||
|
|
gpNEnemyItemsSummaryArray && gusNEnemyItemsSummaryArraySize )
|
|
*/
|
|
{
|
|
ShadowVideoSurfaceRectUsingLowPercentTable( FRAME_BUFFER, iScreenWidthOffset + 351, iScreenHeightOffset + 31, iScreenWidthOffset + 404, iScreenHeightOffset + 42 );
|
|
}
|
|
else
|
|
{
|
|
ShadowVideoSurfaceRect( FRAME_BUFFER, iScreenWidthOffset + 351, iScreenHeightOffset + 31, iScreenWidthOffset + 404, iScreenHeightOffset + 42 );
|
|
}
|
|
SetFontForeground( FONT_GRAY2 );
|
|
}
|
|
|
|
RenderButtons();
|
|
|
|
if( gfRenderMap )
|
|
{
|
|
gfRenderMap = FALSE;
|
|
BltVideoObjectFromIndex( FRAME_BUFFER, guiOmertaMap, 0, MAP_LEFT-2, MAP_TOP-2, VO_BLT_SRCTRANSPARENCY, NULL );
|
|
InvalidateRegion( MAP_LEFT-1, MAP_TOP-1, MAP_RIGHT+1, MAP_BOTTOM+1 );
|
|
//Draw the coordinates
|
|
SetFont( SMALLCOMPFONT );
|
|
SetFontForeground( FONT_BLACK );
|
|
for( y = 0; y < 16; y++ )
|
|
{
|
|
mprintf( MAP_LEFT-8, MAP_TOP+4+y*13, L"%c", 65 + y );
|
|
}
|
|
for( x = 1; x <= 16; x++ )
|
|
{
|
|
CHAR16 str[3];
|
|
swprintf( str, L"%d", x );
|
|
mprintf( MAP_LEFT+x*13-(13+StringPixLength( str, SMALLCOMPFONT ))/2, MAP_TOP-8, str );
|
|
}
|
|
if( gfRenderGrid )
|
|
{
|
|
UINT16 pos;
|
|
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
|
|
SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
for( i = 1; i <= 15; i++ )
|
|
{
|
|
//draw vertical lines
|
|
pos = (UINT16)(i * 13 + MAP_LEFT);
|
|
LineDraw( TRUE, pos, MAP_TOP, pos, MAP_BOTTOM-1, 0, pDestBuf );
|
|
//draw horizontal lines
|
|
pos = (UINT16)(i * 13 + MAP_TOP);
|
|
LineDraw( TRUE, MAP_LEFT, pos, MAP_RIGHT-1, pos, 0, pDestBuf );
|
|
}
|
|
UnLockVideoSurface( FRAME_BUFFER );
|
|
}
|
|
if( gfRenderProgress )
|
|
{
|
|
UINT8 ubNumUndergroundLevels;
|
|
CHAR16 str[2];
|
|
for( y = 0; y < 16; y++ )
|
|
{
|
|
ClipRect.iTop = MAP_TOP + y*13;
|
|
ClipRect.iBottom = ClipRect.iTop + 12;
|
|
for( x = 0; x < 16; x++ )
|
|
{
|
|
if( giCurrentViewLevel == ALL_LEVELS_MASK )
|
|
{
|
|
ubNumUndergroundLevels = 0;
|
|
if( gbSectorLevels[x][y] & BASEMENT1_LEVEL_MASK ) ubNumUndergroundLevels++;
|
|
if( gbSectorLevels[x][y] & BASEMENT2_LEVEL_MASK ) ubNumUndergroundLevels++;
|
|
if( gbSectorLevels[x][y] & BASEMENT3_LEVEL_MASK ) ubNumUndergroundLevels++;
|
|
if( ubNumUndergroundLevels )
|
|
{ //display the number of underground levels. If there
|
|
//is no ground level, then it'll be shadowed.
|
|
SetFont( SMALLCOMPFONT );
|
|
SetFontForeground( FONT_YELLOW );
|
|
swprintf( str, L"%d", ubNumUndergroundLevels );
|
|
mprintf( MAP_LEFT + x*13 + 4, ClipRect.iTop + 4, str );
|
|
}
|
|
if( gbSectorLevels[x][y] & GROUND_LEVEL_MASK )
|
|
{
|
|
if( !gfItemDetailsMode || !gpSectorSummary[x][y][0] || gpSectorSummary[x][y][0]->usNumItems )
|
|
continue;
|
|
}
|
|
}
|
|
else if( giCurrentViewLevel == ALTERNATE_LEVELS_MASK )
|
|
{
|
|
ubNumUndergroundLevels = 0;
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B1_MASK ) ubNumUndergroundLevels++;
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B2_MASK ) ubNumUndergroundLevels++;
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B3_MASK ) ubNumUndergroundLevels++;
|
|
if( ubNumUndergroundLevels )
|
|
{ //display the number of underground levels. If there
|
|
//is no ground level, then it'll be shadowed.
|
|
SetFont( SMALLCOMPFONT );
|
|
SetFontForeground( FONT_YELLOW );
|
|
swprintf( str, L"%d", ubNumUndergroundLevels );
|
|
mprintf( MAP_LEFT + x*13 + 4, ClipRect.iTop + 4, str );
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_GROUND_MASK )
|
|
{
|
|
if( !gfItemDetailsMode || !gpSectorSummary[x][y][4] || gpSectorSummary[x][y][4]->usNumItems )
|
|
continue;
|
|
}
|
|
}
|
|
else if( gbSectorLevels[x][y] & giCurrentViewLevel )
|
|
{
|
|
if( !gfItemDetailsMode || !gpSectorSummary[x][y][giCurrLevel] || gpSectorSummary[x][y][giCurrLevel]->usNumItems )
|
|
continue;
|
|
}
|
|
ClipRect.iLeft = MAP_LEFT + x*13;
|
|
ClipRect.iRight = ClipRect.iLeft + 12;
|
|
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
|
|
Blt16BPPBufferShadowRect( (UINT16*)pDestBuf, uiDestPitchBYTES, &ClipRect );
|
|
if( giCurrentViewLevel == BASEMENT1_LEVEL_MASK ||
|
|
giCurrentViewLevel == BASEMENT2_LEVEL_MASK ||
|
|
giCurrentViewLevel == BASEMENT3_LEVEL_MASK ||
|
|
giCurrentViewLevel == ALTERNATE_B1_MASK ||
|
|
giCurrentViewLevel == ALTERNATE_B2_MASK ||
|
|
giCurrentViewLevel == ALTERNATE_B3_MASK )
|
|
Blt16BPPBufferShadowRect( (UINT16*)pDestBuf, uiDestPitchBYTES, &ClipRect );
|
|
UnLockVideoSurface( FRAME_BUFFER );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if( gfGlobalSummaryExists )
|
|
{
|
|
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
|
|
SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
//Render the grid for the map currently residing in memory (blue).
|
|
if( gfWorldLoaded && !gfTempFile && gsSectorX )
|
|
{
|
|
x = MAP_LEFT + (gsSectorX-1) * 13 + 1;
|
|
y = MAP_TOP + (gsSectorY-1) * 13 + 1;
|
|
RectangleDraw( TRUE, x, y, x+11, y+11, Get16BPPColor( FROMRGB( 50, 50, 200 ) ), pDestBuf );
|
|
}
|
|
|
|
//Render the grid for the sector currently in focus (red).
|
|
if( gsSelSectorX > 0 && !gfTempFile )
|
|
{
|
|
x = MAP_LEFT + (gsSelSectorX-1) * 13 ;
|
|
y = MAP_TOP + (gsSelSectorY-1) * 13 ;
|
|
RectangleDraw( TRUE, x, y, x+13, y+13, Get16BPPColor( FROMRGB( 200, 50, 50 ) ), pDestBuf );
|
|
}
|
|
|
|
//Render the grid for the sector if the mouse is over it (yellow).
|
|
if( gsHiSectorX > 0 )
|
|
{
|
|
x = MAP_LEFT + (gsHiSectorX-1) * 13 - 1;
|
|
y = MAP_TOP + (gsHiSectorY-1) * 13 - 1;
|
|
RectangleDraw( TRUE, x, y, x+15, y+15, Get16BPPColor( FROMRGB( 200, 200, 50 ) ), pDestBuf );
|
|
}
|
|
UnLockVideoSurface( FRAME_BUFFER );
|
|
}
|
|
//Check to see if the user clicked on one of the hot spot mode change areas.
|
|
if( gfLeftButtonState )
|
|
{
|
|
if( !gfItemDetailsMode )
|
|
{
|
|
if( gpCurrentSectorSummary )
|
|
/*&& gpCurrentSectorSummary->usNumItems ||
|
|
gpPEnemyItemsSummaryArray && gusPEnemyItemsSummaryArraySize ||
|
|
gpNEnemyItemsSummaryArray && gusNEnemyItemsSummaryArraySize )*/
|
|
{
|
|
if( gusMouseXPos >= (iScreenWidthOffset + 350) && gusMouseYPos >= (iScreenHeightOffset + 30) && gusMouseXPos <= (iScreenWidthOffset + 404) && gusMouseYPos <= (iScreenHeightOffset + 42) )
|
|
{
|
|
gfItemDetailsMode = TRUE;
|
|
gfSetupItemDetailsMode = TRUE;
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
}
|
|
}
|
|
else if( gfItemDetailsMode && gusMouseXPos >= (iScreenWidthOffset + 350) && gusMouseYPos >= (iScreenHeightOffset + 15) && gusMouseXPos <= (iScreenWidthOffset + 404) && gusMouseYPos <= (iScreenHeightOffset + 27) )
|
|
{
|
|
gfItemDetailsMode = FALSE;
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
//dnl ch30 150909
|
|
void ResetCustomFileSectorSummary(void)
|
|
{
|
|
memset(&gCustomFileSectorSummary, 0, sizeof(SUMMARYFILE));
|
|
}
|
|
|
|
//dnl ch31 150909
|
|
void GetSectorFromFileName(STR16 szFileName, INT16& sSectorX, INT16& sSectorY, INT8& bSectorZ, BOOLEAN& fAltMap)
|
|
{
|
|
const int strsz = 16;
|
|
CHAR16 str[strsz] = L"";
|
|
if(szFileName[2] == L'.' || szFileName[2] == L'_')
|
|
{
|
|
str[0] = szFileName[0];
|
|
str[1] = L'0';
|
|
wmemcpy(str+2, szFileName+1, strsz-2);
|
|
}
|
|
else if(szFileName[1] == L'1')
|
|
wmemcpy(str, szFileName, strsz);
|
|
for(int i=0; i<strsz; i++)
|
|
str[i] = towupper(str[i]);
|
|
if((str[0] >= L'A' && str[0] <= L'P') && (str[1] >= L'0' && str[1] <= L'9') && (str[2] >= L'0' && str[2] <= L'9'))
|
|
{
|
|
sSectorX = (str[1] - L'0') * 10 + str[2] - L'0';
|
|
sSectorY = str[0] - L'A' + 1;
|
|
bSectorZ = 0;
|
|
fAltMap = FALSE;
|
|
if(!(sSectorX < 1 || sSectorX > 16 || sSectorY < 1 || sSectorY > 16))
|
|
{
|
|
if(wcscmp(&str[3], L".DAT") == 0)
|
|
return;
|
|
else if(wcscmp(&str[3], L"_A.DAT") == 0)
|
|
{
|
|
fAltMap = TRUE;// Alternate Ground Map
|
|
return;
|
|
}
|
|
else if(str[3] == L'_' && str[4] == L'B' && str[5] >= L'1' && str[5] <= L'3')
|
|
{
|
|
bSectorZ = str[5] - L'0';
|
|
if(wcscmp(&str[6], L".DAT") == 0)
|
|
return;
|
|
else if(wcscmp(&str[6], L"_A.DAT") == 0)
|
|
{
|
|
fAltMap = TRUE;// Alternate Underground Map
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
sSectorX = 0;
|
|
sSectorY = 0;
|
|
bSectorZ = 0;
|
|
fAltMap = FALSE;
|
|
}
|
|
|
|
void UpdateSectorSummary( STR16 gszFilename, BOOLEAN fUpdate )
|
|
{
|
|
CHAR16 str[50];
|
|
CHAR8 szCoord[40];
|
|
//dnl ch31 130909
|
|
INT8 bSectorZ;
|
|
BOOLEAN fAltMap;
|
|
GetSectorFromFileName(gszFilename, gsSelSectorX, gsSelSectorY, bSectorZ, fAltMap);
|
|
gfRenderSummary = TRUE;
|
|
gfMapFileDirty = FALSE;
|
|
gsSectorX = gsSelSectorX;
|
|
gsSectorY = gsSelSectorY;
|
|
if(!gsSectorX)
|
|
{
|
|
CHAR8 ubNewFilename[50];
|
|
sprintf(ubNewFilename, "%S", gszFilename);
|
|
ReEvaluateWorld(ubNewFilename);//dnl ch30 150909
|
|
return;
|
|
}
|
|
switch(bSectorZ)
|
|
{
|
|
case 0:
|
|
if(fAltMap)
|
|
{
|
|
gsSectorLayer = ALTERNATE_GROUND_MASK;
|
|
giCurrLevel = 4;
|
|
}
|
|
else
|
|
{
|
|
gsSectorLayer = GROUND_LEVEL_MASK;
|
|
giCurrLevel = 0;
|
|
}
|
|
break;
|
|
case 1:
|
|
if(fAltMap)
|
|
{
|
|
gsSectorLayer = ALTERNATE_B1_MASK;
|
|
giCurrLevel = 5;
|
|
}
|
|
else
|
|
{
|
|
gsSectorLayer = BASEMENT1_LEVEL_MASK;
|
|
giCurrLevel = 1;
|
|
}
|
|
break;
|
|
case 2:
|
|
if(fAltMap)
|
|
{
|
|
gsSectorLayer = ALTERNATE_B2_MASK;
|
|
giCurrLevel = 6;
|
|
}
|
|
else
|
|
{
|
|
gsSectorLayer = BASEMENT2_LEVEL_MASK;
|
|
giCurrLevel = 2;
|
|
}
|
|
break;
|
|
case 3:
|
|
if(fAltMap)
|
|
{
|
|
gsSectorLayer = ALTERNATE_B3_MASK;
|
|
giCurrLevel = 7;
|
|
}
|
|
else
|
|
{
|
|
gsSectorLayer = BASEMENT3_LEVEL_MASK;
|
|
giCurrLevel = 3;
|
|
}
|
|
break;
|
|
}
|
|
giCurrentViewLevel = gsSectorLayer;
|
|
if( !(gbSectorLevels[gsSectorX-1][gsSectorY-1] & gsSectorLayer) )
|
|
{
|
|
//new sector map saved, so update the global file.
|
|
gbSectorLevels[gsSectorX-1][gsSectorY-1] |= gsSectorLayer;
|
|
}
|
|
|
|
if( fUpdate )
|
|
{
|
|
SetFont( FONT10ARIAL );
|
|
SetFontForeground( FONT_LTKHAKI );
|
|
SetFontShadow( FONT_NEARBLACK );
|
|
swprintf( str, pUpdateSectorSummaryText[0], gszFilename );
|
|
|
|
if( gfSummaryWindowActive )
|
|
{
|
|
mprintf( MAP_LEFT, MAP_BOTTOM+100, str );
|
|
InvalidateRegion( MAP_LEFT, MAP_BOTTOM+100, MAP_LEFT+150, MAP_BOTTOM+110 );
|
|
CreateProgressBar( 0, MAP_LEFT, MAP_BOTTOM+110, MAP_LEFT+140, MAP_BOTTOM+120 );
|
|
}
|
|
else
|
|
{
|
|
mprintf( (iScreenWidthOffset + 320) - StringPixLength( str, FONT10ARIAL )/2, iScreenHeightOffset + 190, str );
|
|
InvalidateRegion( iScreenWidthOffset + 200, iScreenHeightOffset + 190, iScreenWidthOffset + 400, iScreenHeightOffset + 200 );
|
|
CreateProgressBar( 0, iScreenWidthOffset + 250, iScreenHeightOffset + 200, iScreenWidthOffset + 390, iScreenHeightOffset + 210 );
|
|
}
|
|
|
|
sprintf( szCoord, "%S", gszFilename );
|
|
if( gsSectorX > 9 )
|
|
szCoord[3] = '\0';
|
|
else
|
|
szCoord[2] = '\0';
|
|
gusNumEntriesWithOutdatedOrNoSummaryInfo++;
|
|
EvaluateWorld( szCoord, (UINT8)giCurrLevel );
|
|
|
|
RemoveProgressBar( 0 );
|
|
}
|
|
else
|
|
gusNumEntriesWithOutdatedOrNoSummaryInfo++;
|
|
}
|
|
|
|
void SummaryOkayCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
DestroySummaryWindow();
|
|
}
|
|
}
|
|
|
|
void SummaryToggleGridCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
gfRenderGrid = (BOOLEAN)(btn->uiFlags & BUTTON_CLICKED_ON);
|
|
gfRenderMap = TRUE;
|
|
}
|
|
}
|
|
|
|
void SummaryToggleAlternateCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
if( btn->uiFlags & BUTTON_CLICKED_ON )
|
|
{
|
|
giCurrentViewLevel <<= 4;
|
|
gfAlternateMaps = TRUE;
|
|
}
|
|
else
|
|
{
|
|
giCurrentViewLevel >>= 4;
|
|
gfAlternateMaps = FALSE;
|
|
}
|
|
gfRenderSummary = TRUE;
|
|
if(gfItemDetailsMode)//dnl ch81 041213
|
|
gfSetupItemDetailsMode = TRUE;
|
|
}
|
|
}
|
|
|
|
void SummarySciFiCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
ButtonList[ iSummaryButton[ SUMMARY_SCIFI ] ]->uiFlags |= (BUTTON_CLICKED_ON | BUTTON_DIRTY);
|
|
ButtonList[ iSummaryButton[ SUMMARY_REAL ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
|
|
ButtonList[ iSummaryButton[ SUMMARY_REAL ] ]->uiFlags |= BUTTON_DIRTY;
|
|
ButtonList[ iSummaryButton[ SUMMARY_ENEMY ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
|
|
ButtonList[ iSummaryButton[ SUMMARY_ENEMY ] ]->uiFlags |= BUTTON_DIRTY;
|
|
gubSummaryItemMode = ITEMMODE_SCIFI;
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
}
|
|
|
|
void SummaryRealCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
ButtonList[ iSummaryButton[ SUMMARY_SCIFI ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
|
|
ButtonList[ iSummaryButton[ SUMMARY_SCIFI ] ]->uiFlags |= BUTTON_DIRTY;
|
|
ButtonList[ iSummaryButton[ SUMMARY_REAL ] ]->uiFlags |= (BUTTON_CLICKED_ON | BUTTON_DIRTY);
|
|
ButtonList[ iSummaryButton[ SUMMARY_ENEMY ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
|
|
ButtonList[ iSummaryButton[ SUMMARY_ENEMY ] ]->uiFlags |= BUTTON_DIRTY;
|
|
gubSummaryItemMode = ITEMMODE_REAL;
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
}
|
|
|
|
void SummaryEnemyCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
ButtonList[ iSummaryButton[ SUMMARY_SCIFI ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
|
|
ButtonList[ iSummaryButton[ SUMMARY_SCIFI ] ]->uiFlags |= BUTTON_DIRTY;
|
|
ButtonList[ iSummaryButton[ SUMMARY_REAL ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
|
|
ButtonList[ iSummaryButton[ SUMMARY_REAL ] ]->uiFlags |= BUTTON_DIRTY;
|
|
ButtonList[ iSummaryButton[ SUMMARY_ENEMY ] ]->uiFlags |= (BUTTON_CLICKED_ON | BUTTON_DIRTY);
|
|
gubSummaryItemMode = ITEMMODE_ENEMY;
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
}
|
|
|
|
void SummaryToggleProgressCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
gfRenderProgress = (BOOLEAN)(btn->uiFlags & BUTTON_CLICKED_ON);
|
|
gfRenderMap = TRUE;
|
|
}
|
|
}
|
|
|
|
#include "Tile Surface.h"
|
|
|
|
BOOLEAN HandleSummaryInput( InputAtom *pEvent )
|
|
{
|
|
if( !gfSummaryWindowActive )
|
|
return FALSE;
|
|
gfCtrlPressed = pEvent->usKeyState & CTRL_DOWN;
|
|
if( !HandleTextInput( pEvent ) && pEvent->usEvent == KEY_DOWN || pEvent->usEvent == KEY_REPEAT )
|
|
{
|
|
INT32 x;
|
|
switch( pEvent->usParam )
|
|
{
|
|
case ESC:
|
|
if( !gfWorldLoaded )
|
|
{
|
|
DestroySummaryWindow();
|
|
pEvent->usParam = 'x';
|
|
pEvent->usKeyState |= ALT_DOWN;
|
|
gfOverheadMapDirty = TRUE;
|
|
return FALSE;
|
|
}
|
|
case ENTER:
|
|
if( GetActiveFieldID() == 1 )
|
|
SelectNextField();
|
|
else if( gfWorldLoaded )
|
|
DestroySummaryWindow();
|
|
break;
|
|
case 'y':case 'Y':
|
|
if( gusNumEntriesWithOutdatedOrNoSummaryInfo && !gfOutdatedDenied )
|
|
{
|
|
gfRenderSummary = TRUE;
|
|
RegenerateSummaryInfoForAllOutdatedMaps();
|
|
}
|
|
if( !gfGlobalSummaryExists && !gfDeniedSummaryCreation )
|
|
{
|
|
gfGlobalSummaryExists = TRUE;
|
|
CreateGlobalSummary();
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
break;
|
|
case 'n':case 'N':
|
|
if( gusNumEntriesWithOutdatedOrNoSummaryInfo && !gfOutdatedDenied )
|
|
{
|
|
gfOutdatedDenied = TRUE;
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
if( !gfGlobalSummaryExists && !gfDeniedSummaryCreation )
|
|
{
|
|
gfDeniedSummaryCreation = TRUE;
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
break;
|
|
case 'x':
|
|
if (pEvent->usKeyState & ALT_DOWN )
|
|
{
|
|
DestroySummaryWindow();
|
|
return FALSE;
|
|
}
|
|
break;
|
|
case RIGHTARROW:
|
|
gfRenderSummary = TRUE;
|
|
if( !gsSelSectorY )
|
|
gsSelSectorY = 1;
|
|
gsSelSectorX++;
|
|
if( gsSelSectorX > 16 )
|
|
gsSelSectorX = 1;
|
|
break;
|
|
case LEFTARROW:
|
|
gfRenderSummary = TRUE;
|
|
if( !gsSelSectorY )
|
|
gsSelSectorY = 1;
|
|
gsSelSectorX--;
|
|
if( gsSelSectorX < 1 )
|
|
gsSelSectorX = 16;
|
|
break;
|
|
case UPARROW:
|
|
gfRenderSummary = TRUE;
|
|
if( !gsSelSectorX )
|
|
gsSelSectorX = 1;
|
|
gsSelSectorY--;
|
|
if( gsSelSectorY < 1 )
|
|
gsSelSectorY = 16;
|
|
break;
|
|
case DNARROW:
|
|
gfRenderSummary = TRUE;
|
|
if( !gsSelSectorX )
|
|
gsSelSectorX = 1;
|
|
gsSelSectorY++;
|
|
if( gsSelSectorY > 16 )
|
|
gsSelSectorY = 1;
|
|
break;
|
|
case SHIFT_LEFTARROW:
|
|
|
|
break;
|
|
case SHIFT_RIGHTARROW:
|
|
|
|
break;
|
|
#ifdef dnlTEST//dnl ch81 051213
|
|
case '\'':
|
|
break;
|
|
#endif
|
|
}
|
|
}
|
|
else if( pEvent->usEvent == KEY_UP )
|
|
{ //for releasing modes requiring persistant state keys
|
|
switch( pEvent->usParam )
|
|
{
|
|
case F5:
|
|
ReleaseSummaryWindow();
|
|
break;
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void CreateGlobalSummary()
|
|
{
|
|
OutputDebugString( "Generating GlobalSummary Information...\n" );
|
|
|
|
gfGlobalSummaryExists = FALSE;
|
|
//Set current directory to JA2\DevInfo which contains all of the summary data
|
|
vfs::COpenWriteFile wfile(L"DevInfo\\readme.txt",true,true);
|
|
std::string str = "This information is used in conjunction with the editor.\n";
|
|
str += "This directory or it's contents shouldn't be included with final release.\n";
|
|
SGP_TRYCATCH_RETHROW( wfile->write(str.c_str(), str.length()), L"" );
|
|
|
|
// Snap: Restore the data directory once we are finished.
|
|
//SetFileManCurrentDirectory( DataDir );
|
|
//sprintf( Dir, "%s\\Data", ExecDir );
|
|
//SetFileManCurrentDirectory( Dir );
|
|
|
|
LoadGlobalSummary();
|
|
RegenerateSummaryInfoForAllOutdatedMaps();
|
|
gfRenderSummary = TRUE;
|
|
|
|
OutputDebugString( "GlobalSummary Information generated successfully.\n" );
|
|
}
|
|
|
|
void MapMoveCallback( MOUSE_REGION *reg, INT32 reason )
|
|
{
|
|
static INT16 gsPrevX = 0, gsPrevY = 0;
|
|
//calc current sector highlighted.
|
|
if( reason & MSYS_CALLBACK_REASON_LOST_MOUSE )
|
|
{
|
|
gsPrevX = gsHiSectorX = 0;
|
|
gsPrevY = gsHiSectorY = 0;
|
|
gfRenderMap = TRUE;
|
|
return;
|
|
}
|
|
gsHiSectorX = min( (reg->RelativeXPos / 13) + 1, 16 );
|
|
gsHiSectorY = min( (reg->RelativeYPos / 13) + 1, 16 );
|
|
if( gsPrevX != gsHiSectorX || gsPrevY != gsHiSectorY )
|
|
{
|
|
gsPrevX = gsHiSectorX;
|
|
gsPrevY = gsHiSectorY;
|
|
gfRenderMap = TRUE;
|
|
}
|
|
}
|
|
|
|
void MapClickCallback( MOUSE_REGION *reg, INT32 reason )
|
|
{
|
|
static INT16 sLastX = -1, sLastY = -1;
|
|
static INT32 iLastClickTime = 0;
|
|
//calc current sector selected.
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
if( GetActiveFieldID() == 1 )
|
|
{
|
|
gsSelSectorX = 0;
|
|
SelectNextField();
|
|
}
|
|
gsSelSectorX = min( (reg->RelativeXPos / 13) + 1, 16 );
|
|
gsSelSectorY = min( (reg->RelativeYPos / 13) + 1, 16 );
|
|
if( gsSelSectorX != sLastX || gsSelSectorY != sLastY )
|
|
{ //clicked in a new sector
|
|
gfOverrideDirty = TRUE;
|
|
sLastX = gsSelSectorX;
|
|
sLastY = gsSelSectorY;
|
|
iLastClickTime = GetJA2Clock();
|
|
switch( giCurrentViewLevel )
|
|
{
|
|
case ALL_LEVELS_MASK:
|
|
if( gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 0 ] )
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 0 ];
|
|
else if( gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 1 ] )
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 1 ];
|
|
else if( gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 2 ] )
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 2 ];
|
|
else if( gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 3 ] )
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 3 ];
|
|
else
|
|
gpCurrentSectorSummary = NULL;
|
|
break;
|
|
case GROUND_LEVEL_MASK: //already pointing to the correct level
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 0 ];
|
|
break;
|
|
case BASEMENT1_LEVEL_MASK:
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 1 ];
|
|
break;
|
|
case BASEMENT2_LEVEL_MASK:
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 2 ];
|
|
break;
|
|
case BASEMENT3_LEVEL_MASK:
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 3 ];
|
|
break;
|
|
case ALTERNATE_LEVELS_MASK:
|
|
if( gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 4 ] )
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 4 ];
|
|
else if( gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 5 ] )
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 5 ];
|
|
else if( gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 6 ] )
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 6 ];
|
|
else if( gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 7 ] )
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 7 ];
|
|
else
|
|
gpCurrentSectorSummary = NULL;
|
|
break;
|
|
case ALTERNATE_GROUND_MASK: //already pointing to the correct level
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 4 ];
|
|
break;
|
|
case ALTERNATE_B1_MASK:
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 5 ];
|
|
break;
|
|
case ALTERNATE_B2_MASK:
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 6 ];
|
|
break;
|
|
case ALTERNATE_B3_MASK:
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1 ][ gsSelSectorY - 1 ][ 7 ];
|
|
break;
|
|
}
|
|
if( gpWorldItemsSummaryArray )
|
|
{
|
|
delete[]( gpWorldItemsSummaryArray );
|
|
gpWorldItemsSummaryArray = NULL;
|
|
gusWorldItemsSummaryArraySize = 0;
|
|
}
|
|
if( gfItemDetailsMode )
|
|
{
|
|
if( gpCurrentSectorSummary )
|
|
/*&& gpCurrentSectorSummary->usNumItems ||
|
|
gpPEnemyItemsSummaryArray && gusPEnemyItemsSummaryArraySize ||
|
|
gpNEnemyItemsSummaryArray && gusNEnemyItemsSummaryArraySize )*/
|
|
{
|
|
gfSetupItemDetailsMode = TRUE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{ //clicked in same sector, check for double click
|
|
INT32 iNewClickTime = GetJA2Clock();
|
|
if( iNewClickTime - iLastClickTime < 400 )
|
|
{
|
|
gfFileIO = TRUE;
|
|
}
|
|
iLastClickTime = iNewClickTime;
|
|
}
|
|
gfRenderSummary = TRUE;
|
|
}
|
|
}
|
|
|
|
void SummaryToggleLevelCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
INT8 i;
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
if( GetActiveFieldID() == 1 )
|
|
SelectNextField();
|
|
gfRenderSummary = TRUE;
|
|
if(gfItemDetailsMode)//dnl ch81 041213
|
|
gfSetupItemDetailsMode = TRUE;
|
|
for( i = SUMMARY_ALL; i <= SUMMARY_B3; i++ )
|
|
{
|
|
if( btn->IDNum == iSummaryButton[ i ] )
|
|
{
|
|
switch( i )
|
|
{
|
|
case SUMMARY_ALL:
|
|
giCurrentViewLevel = ALL_LEVELS_MASK;
|
|
break;
|
|
case SUMMARY_G:
|
|
giCurrentViewLevel = GROUND_LEVEL_MASK;
|
|
break;
|
|
case SUMMARY_B1:
|
|
giCurrentViewLevel = BASEMENT1_LEVEL_MASK;
|
|
break;
|
|
case SUMMARY_B2:
|
|
giCurrentViewLevel = BASEMENT2_LEVEL_MASK;
|
|
break;
|
|
case SUMMARY_B3:
|
|
giCurrentViewLevel = BASEMENT3_LEVEL_MASK;
|
|
break;
|
|
}
|
|
if( gfAlternateMaps )
|
|
giCurrentViewLevel <<= 4;
|
|
}
|
|
else
|
|
{
|
|
ButtonList[ iSummaryButton[ i ] ]->uiFlags &= (~BUTTON_CLICKED_ON);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void SummaryLoadMapCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
STR16 ptr;
|
|
CHAR16 str[ 50 ];
|
|
gfRenderSummary = TRUE;
|
|
|
|
SetFont( FONT10ARIAL );
|
|
SetFontForeground( FONT_LTKHAKI );
|
|
SetFontShadow( FONT_NEARBLACK );
|
|
|
|
fNewMapSaved = TRUE;
|
|
|
|
//swprintf( str, L"Loading map: %s...", gszDisplayName );
|
|
//mprintf( MAP_LEFT, MAP_BOTTOM+100, str );
|
|
//InvalidateRegion( MAP_LEFT, MAP_BOTTOM+100, MAP_LEFT+150, MAP_BOTTOM+110 );
|
|
|
|
CreateProgressBar( 0, MAP_LEFT+5, MAP_BOTTOM+110, iScreenWidthOffset + 573, MAP_BOTTOM+120 );
|
|
|
|
//DefineProgressBarPanel( 0, 65, 79, 94, MAP_LEFT, iScreenHeightOffset + 318, iScreenWidthOffset + 578, iScreenHeightOffset + 356 );
|
|
DefineProgressBarPanel( 0, 65, 79, 94, MAP_LEFT, iScreenHeightOffset + 318, MAP_LEFT + 161, iScreenHeightOffset + 356 );
|
|
swprintf( str, pSummaryLoadMapCallbackText[0], gszDisplayName );
|
|
SetProgressBarTitle( 0, str, BLOCKFONT2, FONT_RED, FONT_NEARBLACK );
|
|
SetProgressBarMsgAttributes( 0, SMALLCOMPFONT, FONT_BLACK, FONT_BLACK );
|
|
|
|
// WANNE: When loading from summary map, never resize the map, just load it!
|
|
gfResizeMapOnLoading = FALSE;
|
|
|
|
if( ExternalLoadMap( gszDisplayName ) )
|
|
{
|
|
EnableButton( iSummaryButton[ SUMMARY_OKAY ] );
|
|
gsSectorX = gsSelSectorX;
|
|
gsSectorY = gsSelSectorY;
|
|
gfOverrideDirty = TRUE;
|
|
gfMapFileDirty = FALSE;
|
|
}
|
|
RemoveProgressBar( 0 );
|
|
ptr = wcsstr( gszDisplayName, L"_b" );
|
|
if( !ptr || ptr[3] != L'.' )
|
|
{
|
|
gsSectorLayer = GROUND_LEVEL_MASK;
|
|
giCurrLevel = 0;
|
|
}
|
|
else
|
|
{
|
|
switch( ptr[2] - L'0' )
|
|
{
|
|
case 1: gsSectorLayer = BASEMENT1_LEVEL_MASK; break;
|
|
case 2: gsSectorLayer = BASEMENT2_LEVEL_MASK; break;
|
|
case 3: gsSectorLayer = BASEMENT3_LEVEL_MASK; break;
|
|
default: gsSectorLayer = GROUND_LEVEL_MASK; break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void SummarySaveMapCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
gfRenderSummary = TRUE;
|
|
if( gubOverrideStatus == INACTIVE || gfOverride == TRUE )
|
|
{
|
|
if( gubOverrideStatus == READONLY )
|
|
{
|
|
CHAR8 filename[40];
|
|
sprintf( filename, "MAPS\\%S", gszDisplayName );
|
|
// Other call sites have replaced this with FileDelete(); for VFS, should we do the same here?
|
|
//FileClearAttributes( filename );
|
|
}
|
|
if( ExternalSaveMap( gszDisplayName ) )
|
|
{
|
|
if( gsSelSectorX && gsSelSectorY )
|
|
{
|
|
gsSectorX = gsSelSectorX;
|
|
gsSectorY = gsSelSectorY;
|
|
gfMapFileDirty = FALSE;
|
|
gfOverrideDirty = TRUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void SummaryOverrideCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
gfOverride ^= TRUE;
|
|
gfRenderSummary = TRUE;
|
|
if( gfOverride )
|
|
EnableButton( iSummaryButton[ SUMMARY_SAVE ] );
|
|
else
|
|
DisableButton( iSummaryButton[ SUMMARY_SAVE ] );
|
|
}
|
|
}
|
|
|
|
void CalculateOverrideStatus()
|
|
{
|
|
GETFILESTRUCT FileInfo;
|
|
CHAR8 szFilename[40];
|
|
gfOverrideDirty = FALSE;
|
|
gfOverride = FALSE;
|
|
if( gfTempFile )
|
|
{
|
|
CHAR8 *ptr;
|
|
sprintf( szFilename, "MAPS\\%S", gszTempFilename );
|
|
if( strlen( szFilename ) == 5 )
|
|
strcat( szFilename, "test.dat" );
|
|
ptr = strstr( szFilename, "." );
|
|
if( !ptr )
|
|
strcat( szFilename, ".dat" );
|
|
else
|
|
sprintf( ptr, ".dat" );
|
|
}
|
|
else
|
|
sprintf( szFilename, "MAPS\\%S", gszFilename );
|
|
swprintf( gszDisplayName, L"%S", &(szFilename[5]) );
|
|
if( GetFileFirst( szFilename, &FileInfo) )
|
|
{
|
|
if( gfWorldLoaded )
|
|
{
|
|
if( FileInfo.uiFileAttribs & ( FILE_IS_READONLY | FILE_IS_SYSTEM ) )
|
|
gubOverrideStatus = READONLY;
|
|
else
|
|
gubOverrideStatus = OVERWRITE;
|
|
ShowButton( iSummaryButton[ SUMMARY_OVERRIDE ] );
|
|
ButtonList[ iSummaryButton[ SUMMARY_OVERRIDE ] ]->uiFlags &= (~BUTTON_CLICKED_ON);
|
|
GetFileClose(&FileInfo);
|
|
DisableButton( iSummaryButton[ SUMMARY_SAVE ] );
|
|
}
|
|
if( gfTempFile )
|
|
EnableButton( iSummaryButton[ SUMMARY_LOAD ] );
|
|
}
|
|
else
|
|
{
|
|
gubOverrideStatus = INACTIVE;
|
|
HideButton( iSummaryButton[ SUMMARY_OVERRIDE ] );
|
|
if( gfWorldLoaded )
|
|
EnableButton( iSummaryButton[ SUMMARY_SAVE ] );
|
|
}
|
|
}
|
|
|
|
void LoadGlobalSummary()
|
|
{
|
|
HWFILE hfile;
|
|
UINT32 uiNumBytesRead;
|
|
FLOAT dMajorVersion;
|
|
INT32 x,y;
|
|
CHAR8 szFilename[40];
|
|
CHAR8 szSector[6];
|
|
|
|
OutputDebugString( "Executing LoadGlobalSummary()...\n" );
|
|
// Snap: save current directory
|
|
gfMustForceUpdateAllMaps = FALSE;
|
|
gusNumberOfMapsToBeForceUpdated = 0;
|
|
gfGlobalSummaryExists = FALSE;
|
|
|
|
//Set current directory to JA2\DevInfo which contains all of the summary data
|
|
//TEMP
|
|
if(FileExists("DevInfo\\_global.sum"))
|
|
{
|
|
FileDelete( "DevInfo\\_global.sum" );
|
|
}
|
|
gfGlobalSummaryExists = TRUE;
|
|
|
|
//Analyse all sectors to see if matching maps exist. For any maps found, the information
|
|
//will be stored in the gbSectorLevels array. Also, it attempts to load summaries for those
|
|
//maps. If the summary information isn't found, then the occurrences are recorded and reported
|
|
//to the user when finished to give the option to generate them.
|
|
for( y = 0; y < 16; y++ )
|
|
{
|
|
for( x = 0; x < 16; x++ )
|
|
{
|
|
gbSectorLevels[x][y] = 0;
|
|
sprintf( szSector, "%c%d", 'A' + y, x + 1 );
|
|
|
|
//main ground level
|
|
sprintf( szFilename, "Maps\\%c%d.dat", 'A' + y, x + 1 );
|
|
hfile = NULL;
|
|
if(FileExists(szFilename))
|
|
{
|
|
hfile = FileOpen( szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE );
|
|
}
|
|
if( hfile )
|
|
{
|
|
gbSectorLevels[x][y] |= GROUND_LEVEL_MASK;
|
|
FileRead( hfile, &dMajorVersion, sizeof( FLOAT ), &uiNumBytesRead );
|
|
FileClose( hfile );
|
|
LoadSummary( szSector, 0, dMajorVersion );
|
|
}
|
|
else
|
|
{
|
|
sprintf( szFilename, "DevInfo\\%s.sum", szSector );
|
|
FileDelete( szFilename );
|
|
}
|
|
//main B1 level
|
|
sprintf( szFilename, "Maps\\%c%d_b1.dat", 'A' + y, x + 1 );
|
|
hfile = NULL;
|
|
if(FileExists(szFilename))
|
|
{
|
|
hfile = FileOpen( szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE );
|
|
}
|
|
if( hfile )
|
|
{
|
|
gbSectorLevels[x][y] |= BASEMENT1_LEVEL_MASK;
|
|
FileRead( hfile, &dMajorVersion, sizeof( FLOAT ), &uiNumBytesRead );
|
|
FileClose( hfile );
|
|
LoadSummary( szSector, 1, dMajorVersion );
|
|
}
|
|
else
|
|
{
|
|
sprintf( szFilename, "DevInfo\\%s_b1.sum", szSector );
|
|
FileDelete( szFilename );
|
|
}
|
|
//main B2 level
|
|
sprintf( szFilename, "Maps\\%c%d_b2.dat", 'A' + y, x + 1 );
|
|
hfile = NULL;
|
|
if(FileExists(szFilename))
|
|
{
|
|
hfile = FileOpen( szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE );
|
|
}
|
|
if( hfile )
|
|
{
|
|
gbSectorLevels[x][y] |= BASEMENT2_LEVEL_MASK;
|
|
FileRead( hfile, &dMajorVersion, sizeof( FLOAT ), &uiNumBytesRead );
|
|
FileClose( hfile );
|
|
LoadSummary( szSector, 2, dMajorVersion );
|
|
}
|
|
else
|
|
{
|
|
sprintf( szFilename, "DevInfo\\%s_b2.sum", szSector );
|
|
FileDelete( szFilename );
|
|
}
|
|
//main B3 level
|
|
sprintf( szFilename, "Maps\\%c%d_b3.dat", 'A' + y, x + 1 );
|
|
hfile = NULL;
|
|
if(FileExists(szFilename))
|
|
{
|
|
hfile = FileOpen( szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE );
|
|
}
|
|
if( hfile )
|
|
{
|
|
gbSectorLevels[x][y] |= BASEMENT3_LEVEL_MASK;
|
|
FileRead( hfile, &dMajorVersion, sizeof( FLOAT ), &uiNumBytesRead );
|
|
FileClose( hfile );
|
|
LoadSummary( szSector, 3, dMajorVersion );
|
|
}
|
|
else
|
|
{
|
|
sprintf( szFilename, "DevInfo\\%s_b3.sum", szSector );
|
|
FileDelete( szFilename );
|
|
}
|
|
//alternate ground level
|
|
sprintf( szFilename, "Maps\\%c%d_a.dat", 'A' + y, x + 1 );
|
|
hfile = NULL;
|
|
if(FileExists(szFilename))
|
|
{
|
|
hfile = FileOpen( szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE );
|
|
}
|
|
if( hfile )
|
|
{
|
|
gbSectorLevels[x][y] |= ALTERNATE_GROUND_MASK;
|
|
FileRead( hfile, &dMajorVersion, sizeof( FLOAT ), &uiNumBytesRead );
|
|
FileClose( hfile );
|
|
LoadSummary( szSector, 4, dMajorVersion );
|
|
}
|
|
else
|
|
{
|
|
sprintf( szFilename, "DevInfo\\%s_a.sum", szSector );
|
|
FileDelete( szFilename );
|
|
}
|
|
//alternate B1 level
|
|
sprintf( szFilename, "Maps\\%c%d_b1_a.dat", 'A' + y, x + 1 );
|
|
hfile = NULL;
|
|
if(FileExists(szFilename))
|
|
{
|
|
hfile = FileOpen( szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE );
|
|
}
|
|
if( hfile )
|
|
{
|
|
gbSectorLevels[x][y] |= ALTERNATE_B1_MASK;
|
|
FileRead( hfile, &dMajorVersion, sizeof( FLOAT ), &uiNumBytesRead );
|
|
FileClose( hfile );
|
|
LoadSummary( szSector, 5, dMajorVersion );
|
|
}
|
|
else
|
|
{
|
|
sprintf( szFilename, "DevInfo\\%s_b1_a.sum", szSector );
|
|
FileDelete( szFilename );
|
|
}
|
|
//alternate B2 level
|
|
sprintf( szFilename, "Maps\\%c%d_b2_a.dat", 'A' + y, x + 1 );
|
|
hfile = NULL;
|
|
if(FileExists(szFilename))
|
|
{
|
|
hfile = FileOpen( szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE );
|
|
}
|
|
if( hfile )
|
|
{
|
|
gbSectorLevels[x][y] |= ALTERNATE_B2_MASK;
|
|
FileRead( hfile, &dMajorVersion, sizeof( FLOAT ), &uiNumBytesRead );
|
|
FileClose( hfile );
|
|
LoadSummary( szSector, 6, dMajorVersion );
|
|
}
|
|
else
|
|
{
|
|
sprintf( szFilename, "DevInfo\\%s_b2_a.sum", szSector );
|
|
FileDelete( szFilename );
|
|
}
|
|
//alternate B3 level
|
|
sprintf( szFilename, "Maps\\%c%d_b3_a.dat", 'A' + y, x + 1 );
|
|
hfile = NULL;
|
|
if(FileExists(szFilename))
|
|
{
|
|
hfile = FileOpen( szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE );
|
|
}
|
|
if( hfile )
|
|
{
|
|
gbSectorLevels[x][y] |= ALTERNATE_B1_MASK;;
|
|
FileRead( hfile, &dMajorVersion, sizeof( FLOAT ), &uiNumBytesRead );
|
|
FileClose( hfile );
|
|
LoadSummary( szSector, 7, dMajorVersion );
|
|
}
|
|
else
|
|
{
|
|
sprintf( szFilename, "DevInfo\\%s_b3_a.sum", szSector );
|
|
FileDelete( szFilename );
|
|
}
|
|
}
|
|
OutputDebugString( (LPCSTR)String("Sector Row %c complete... \n", y + 'A') );
|
|
}
|
|
//sprintf( MapsDir, "%s\\Data", ExecDir );
|
|
//SetFileManCurrentDirectory( MapsDir );
|
|
|
|
if( gfMustForceUpdateAllMaps )
|
|
{
|
|
OutputDebugString( (LPCSTR)String( "A MAJOR MAP UPDATE EVENT HAS BEEN DETECTED FOR %d MAPS!!!!.\n", gusNumberOfMapsToBeForceUpdated ) );
|
|
//ADB update it!
|
|
ApologizeOverrideAndForceUpdateEverything();
|
|
}
|
|
|
|
|
|
OutputDebugString( "LoadGlobalSummary() finished...\n" );
|
|
}
|
|
|
|
void GenerateSummaryList()
|
|
{
|
|
try
|
|
{
|
|
vfs::COpenWriteFile wfile(L"DevInfo/readme.txt",true,true);
|
|
std::string str = "This information is used in conjunction with the editor.\n";
|
|
str += "This directory or it's contents shouldn't be included with final release.\n";
|
|
SGP_TRYCATCH_RETHROW( wfile->write(str.c_str(), str.length()), L"");
|
|
}
|
|
catch(std::exception &ex)
|
|
{
|
|
SGP_RETHROW(L"Could not create readme.txt", ex);
|
|
}
|
|
}
|
|
|
|
//dnl ch28 260909
|
|
void WriteSectorSummaryUpdate(STR8 sFileName, UINT8 ubLevel, SUMMARYFILE* pSummaryFileInfo)
|
|
{
|
|
CHAR8 cFileName[2*FILENAME_BUFLEN];
|
|
sprintf(cFileName, "DevInfo\\%s", sFileName);
|
|
// Presumption is that file came with dat extension
|
|
strcpy(cFileName+strlen(cFileName)-4, ".sum");
|
|
if(!pSummaryFileInfo->Save(cFileName))
|
|
return;
|
|
UpdateMasterProgress();
|
|
INT16 sSectorX, sSectorY;
|
|
INT8 x, y, bSectorZ;
|
|
BOOLEAN fAltMap;
|
|
CHAR16 szFileName[FILENAME_BUFLEN];
|
|
swprintf(szFileName, L"%S", sFileName);
|
|
GetSectorFromFileName(szFileName, sSectorX, sSectorY, bSectorZ, fAltMap);
|
|
if(!sSectorX)
|
|
gCustomFileSectorSummary = *pSummaryFileInfo;//dnl ch30 150909
|
|
else
|
|
{
|
|
if(gusNumEntriesWithOutdatedOrNoSummaryInfo > 0)
|
|
gusNumEntriesWithOutdatedOrNoSummaryInfo--;
|
|
x = sSectorX - 1;
|
|
y = sSectorY - 1;
|
|
if(gpSectorSummary[x][y][ubLevel])
|
|
{
|
|
MemFree(gpSectorSummary[x][y][ubLevel]);
|
|
gpSectorSummary[x][y][ubLevel] = NULL;
|
|
}
|
|
gpSectorSummary[x][y][ubLevel] = pSummaryFileInfo;
|
|
}
|
|
}
|
|
|
|
void SummaryNewGroundLevelCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
gfPendingBasement = FALSE;
|
|
gfPendingCaves = FALSE;
|
|
if( gfWorldLoaded )
|
|
{
|
|
iCurrentAction = ACTION_NEW_MAP;
|
|
}
|
|
else
|
|
{
|
|
CreateNewMap();
|
|
}
|
|
}
|
|
}
|
|
|
|
void SummaryNewBasementLevelCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
void SummaryNewCaveLevelCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
//dnl ch28 260909
|
|
SUMMARYFILE& SUMMARYFILE::operator=(const _OLD_SUMMARYFILE& src)
|
|
{
|
|
if((void*)this != (void*)&src)
|
|
{
|
|
ubSummaryVersion = src.ubSummaryVersion;
|
|
ubSpecial = src.ubSpecial;
|
|
ubNumRooms = src.ubNumRooms;
|
|
dMajorMapVersion = src.dMajorMapVersion;
|
|
ubTilesetID = src.ubTilesetID;
|
|
usNumItems = src.usNumItems;
|
|
usNumLights = src.usNumLights;
|
|
ubNumDoors = src.ubNumDoors;
|
|
ubNumDoorsLocked = src.ubNumDoorsLocked;
|
|
ubNumDoorsTrapped = src.ubNumDoorsTrapped;
|
|
ubNumDoorsLockedAndTrapped = src.ubNumDoorsLockedAndTrapped;
|
|
ubNumElites = src.ubNumElites;
|
|
ubNumAdmins = src.ubNumAdmins;
|
|
ubNumTroops = src.ubNumTroops;
|
|
ubEliteDetailed = src.ubEliteDetailed;
|
|
ubAdminDetailed = src.ubAdminDetailed;
|
|
ubTroopDetailed = src.ubTroopDetailed;
|
|
ubEliteProfile = src.ubEliteProfile;
|
|
ubAdminProfile = src.ubAdminProfile;
|
|
ubTroopProfile = src.ubTroopProfile;
|
|
ubEliteExistance = src.ubEliteExistance;
|
|
ubAdminExistance = src.ubAdminExistance;
|
|
ubTroopExistance = src.ubTroopExistance;
|
|
ubCivSchedules = src.ubCivSchedules;
|
|
ubCivCows = src.ubCivCows;
|
|
ubCivBloodcats = src.ubCivBloodcats;
|
|
ubEnemiesReqWaypoints = src.ubEnemiesReqWaypoints;
|
|
usWarningRoomNums = src.usWarningRoomNums;
|
|
ubEnemiesHaveWaypoints = src.ubEnemiesHaveWaypoints;
|
|
uiNumItemsPosition = src.uiNumItemsPosition;
|
|
uiEnemyPlacementPosition = src.uiEnemyPlacementPosition;
|
|
EnemyTeam = src.EnemyTeam;
|
|
CreatureTeam = src.CreatureTeam;
|
|
RebelTeam = src.RebelTeam;
|
|
CivTeam = src.CivTeam;
|
|
MapInfo = src.MapInfo;
|
|
for(int i=0; i<4; i++)
|
|
ExitGrid[i] = src.ExitGrid[i];
|
|
TranslateArrayFields(usExitGridSize, src.usExitGridSize, 4, UINT16_UINT16);
|
|
TranslateArrayFields(fInvalidDest, src.fInvalidDest, 4, UINT8_UINT8);
|
|
ubNumExitGridDests = src.ubNumExitGridDests;
|
|
fTooManyExitGridDests = src.fTooManyExitGridDests;
|
|
}
|
|
return(*this);
|
|
}
|
|
|
|
BOOLEAN SUMMARYFILE::Load(STR sFileName)
|
|
{
|
|
if(!FileExists(sFileName))
|
|
{
|
|
return FALSE;
|
|
}
|
|
HWFILE hFile = FileOpen(sFileName, FILE_ACCESS_READ, FALSE);
|
|
if(!hFile)
|
|
{
|
|
return(FALSE);
|
|
}
|
|
UINT8 ubSummaryVersion = 0;
|
|
UINT32 uiBytesRead = 0;
|
|
FileRead(hFile, &ubSummaryVersion, sizeof(ubSummaryVersion), &uiBytesRead);
|
|
if(ubSummaryVersion < 14 || ubSummaryVersion > GLOBAL_SUMMARY_VERSION)
|
|
{
|
|
FileClose(hFile);
|
|
return(FALSE);
|
|
}
|
|
FileSeek(hFile, 0L, FILE_SEEK_FROM_START);
|
|
if(ubSummaryVersion == 14)
|
|
{
|
|
_OLD_SUMMARYFILE OldSummaryFile;
|
|
FileRead(hFile, &OldSummaryFile, sizeof(_OLD_SUMMARYFILE), &uiBytesRead);
|
|
*this = OldSummaryFile;
|
|
}
|
|
else
|
|
{
|
|
FileRead(hFile, this, sizeof(SUMMARYFILE), &uiBytesRead);
|
|
}
|
|
FileClose(hFile);
|
|
if(uiBytesRead == sizeof(_OLD_SUMMARYFILE) || uiBytesRead == sizeof(SUMMARYFILE))
|
|
{
|
|
return(TRUE);
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
BOOLEAN SUMMARYFILE::Save(STR sFileName)
|
|
{
|
|
HWFILE hFile = FileOpen(sFileName, FILE_ACCESS_WRITE|FILE_CREATE_ALWAYS, FALSE);
|
|
if(!hFile)
|
|
return(FALSE);
|
|
UINT32 uiBytesWritten = 0;
|
|
FileWrite(hFile, this, sizeof(SUMMARYFILE), &uiBytesWritten);
|
|
FileClose(hFile);
|
|
if(uiBytesWritten != sizeof(SUMMARYFILE))
|
|
return(FALSE);
|
|
return(TRUE);
|
|
}
|
|
|
|
BOOLEAN LoadSummary(STR8 pSector, UINT8 ubLevel, FLOAT dMajorMapVersion)
|
|
{
|
|
INT32 x, y;
|
|
CHAR8 sFileName[2*FILENAME_BUFLEN];
|
|
SUMMARYFILE SummaryFile;
|
|
sprintf(sFileName, "DevInfo\\%s", pSector);
|
|
if(ubLevel % 4)
|
|
{
|
|
CHAR8 str[4];
|
|
sprintf(str, "_b%d", ubLevel%4);
|
|
strcat(sFileName, str);
|
|
}
|
|
if(ubLevel >= 4)
|
|
strcat(sFileName, "_a");
|
|
strcat(sFileName, ".sum");
|
|
if(!SummaryFile.Load(sFileName))
|
|
return(FALSE);
|
|
y = pSector[0] - 'A';
|
|
if(pSector[2] >= '0' && pSector[2] <= '9')
|
|
x = (pSector[1] - '0') * 10 + pSector[2] - '0' - 1;
|
|
else
|
|
x = pSector[1] - '0' - 1;
|
|
if(gpSectorSummary[x][y][ubLevel])
|
|
{
|
|
MemFree(gpSectorSummary[x][y][ubLevel]);
|
|
gpSectorSummary[x][y][ubLevel] = NULL;
|
|
}
|
|
gpSectorSummary[x][y][ubLevel] = (SUMMARYFILE*)MemAlloc(sizeof(SUMMARYFILE));
|
|
if(gpSectorSummary[x][y][ubLevel])
|
|
memcpy(gpSectorSummary[x][y][ubLevel], &SummaryFile, sizeof(SUMMARYFILE));
|
|
if(gpSectorSummary[x][y][ubLevel]->ubSummaryVersion < GLOBAL_SUMMARY_VERSION)
|
|
gusNumEntriesWithOutdatedOrNoSummaryInfo++;
|
|
return(TRUE);
|
|
}
|
|
|
|
double MasterStart, MasterEnd;
|
|
|
|
void UpdateMasterProgress()
|
|
{
|
|
if( gfUpdatingNow && gusTotal )
|
|
{
|
|
MasterStart = (gusCurrent / (double)gusTotal) * 100.0;
|
|
gusCurrent++;
|
|
MasterEnd = (gusCurrent / (double)gusTotal) * 100.0;
|
|
if( gfMajorUpdate )
|
|
{
|
|
SetRelativeStartAndEndPercentage( 2, (UINT16)MasterStart, (UINT16)MasterEnd, NULL );
|
|
RenderProgressBar( 2, 0 );
|
|
}
|
|
else
|
|
SetRelativeStartAndEndPercentage( 1, (UINT16)MasterStart, (UINT16)MasterEnd, NULL );
|
|
}
|
|
}
|
|
|
|
void ReportError( STR8 pSector, UINT8 ubLevel )
|
|
{
|
|
static INT32 yp = iScreenHeightOffset + 180;
|
|
CHAR16 str[40];
|
|
CHAR16 temp[10];
|
|
|
|
//Make sure the file exists... if not, then return false
|
|
swprintf( str, L"%S", pSector );
|
|
if( ubLevel % 4 )
|
|
{
|
|
swprintf( temp, L"_b%d.dat", ubLevel % 4 );
|
|
wcscat( str, temp );
|
|
}
|
|
mprintf( iScreenWidthOffset + 10, yp, pReportErrorText[0] , str );
|
|
InvalidateScreen();
|
|
yp++;
|
|
}
|
|
|
|
|
|
void RegenerateSummaryInfoForAllOutdatedMaps()
|
|
{
|
|
INT32 x, y;
|
|
CHAR8 str[40];
|
|
SUMMARYFILE *pSF;
|
|
//CreateProgressBar( 0, 20, 120, 300, 132 ); //slave (individual)
|
|
//CreateProgressBar( 1, 20, 100, 300, 112 ); //master (total)
|
|
//DefineProgressBarPanel( 0, 65, 79, 94, 10, 80, 310, 152 );
|
|
CreateProgressBar( 0, iScreenWidthOffset + 20, iScreenHeightOffset + 100, iScreenWidthOffset + 300, iScreenHeightOffset + 112 ); //master (total)
|
|
DefineProgressBarPanel( 0, 65, 79, 94, iScreenWidthOffset + 10, iScreenHeightOffset + 80, iScreenWidthOffset + 310, iScreenHeightOffset + 132 );
|
|
SetProgressBarTitle( 0, pRegenerateSummaryInfoForAllOutdatedMapsText[0], BLOCKFONT2, FONT_RED, FONT_NEARBLACK );
|
|
SetProgressBarMsgAttributes( 0, SMALLCOMPFONT, FONT_BLACK, FONT_BLACK );
|
|
gfUpdatingNow = TRUE;
|
|
|
|
gusCurrent = 0;
|
|
gusTotal = gusNumEntriesWithOutdatedOrNoSummaryInfo;
|
|
UpdateMasterProgress();
|
|
|
|
for( y = 0; y < 16; y++ ) for( x = 0; x < 16; x++ )
|
|
{
|
|
sprintf( str, "%c%d", y + 'A', x + 1 );
|
|
if( gbSectorLevels[x][y] & GROUND_LEVEL_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][0];
|
|
if( !pSF || pSF->ubSummaryVersion != GLOBAL_SUMMARY_VERSION )
|
|
if( !EvaluateWorld( str, 0 ) )
|
|
ReportError( str, 0 );
|
|
}
|
|
if( gbSectorLevels[x][y] & BASEMENT1_LEVEL_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][1];
|
|
if( !pSF || pSF->ubSummaryVersion != GLOBAL_SUMMARY_VERSION )
|
|
if( !EvaluateWorld( str, 1 ) )
|
|
ReportError( str, 1 );
|
|
}
|
|
if( gbSectorLevels[x][y] & BASEMENT2_LEVEL_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][2];
|
|
if( !pSF || pSF->ubSummaryVersion != GLOBAL_SUMMARY_VERSION )
|
|
if( !EvaluateWorld( str, 2 ) )
|
|
ReportError( str, 2 );
|
|
}
|
|
if( gbSectorLevels[x][y] & BASEMENT3_LEVEL_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][3];
|
|
if( !pSF || pSF->ubSummaryVersion != GLOBAL_SUMMARY_VERSION )
|
|
if( !EvaluateWorld( str, 3 ) )
|
|
ReportError( str, 3 );
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_GROUND_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][4];
|
|
if( !pSF || pSF->ubSummaryVersion != GLOBAL_SUMMARY_VERSION )
|
|
if( !EvaluateWorld( str, 4 ) )
|
|
ReportError( str, 4 );
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B1_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][5];
|
|
if( !pSF || pSF->ubSummaryVersion != GLOBAL_SUMMARY_VERSION )
|
|
if( !EvaluateWorld( str, 5 ) )
|
|
ReportError( str, 5 );
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B2_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][6];
|
|
if( !pSF || pSF->ubSummaryVersion != GLOBAL_SUMMARY_VERSION )
|
|
if( !EvaluateWorld( str, 6 ) )
|
|
ReportError( str, 6 );
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B3_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][7];
|
|
if( !pSF || pSF->ubSummaryVersion != GLOBAL_SUMMARY_VERSION )
|
|
if( !EvaluateWorld( str, 7 ) )
|
|
ReportError( str, 7 );
|
|
}
|
|
}
|
|
RemoveProgressBar( 0 );
|
|
RemoveProgressBar( 1 );
|
|
gfUpdatingNow = FALSE;
|
|
}
|
|
|
|
void SummaryUpdateCallback( GUI_BUTTON *btn, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
CHAR8 str[40];
|
|
CreateProgressBar( 0, iScreenWidthOffset + 20, iScreenHeightOffset + 100, iScreenWidthOffset + 300, iScreenHeightOffset + 112 ); //slave (individual)
|
|
DefineProgressBarPanel( 0, 65, 79, 94, iScreenWidthOffset + 10, iScreenHeightOffset + 80, iScreenWidthOffset + 310, iScreenHeightOffset + 132 );
|
|
SetProgressBarTitle( 0, pSummaryUpdateCallbackText[0], BLOCKFONT2, FONT_RED, FONT_NEARBLACK );
|
|
SetProgressBarMsgAttributes( 0, SMALLCOMPFONT, FONT_BLACK, FONT_BLACK );
|
|
|
|
|
|
sprintf( str, "%c%d", gsSelSectorY + 'A' - 1, gsSelSectorX );
|
|
EvaluateWorld( str, (UINT8)giCurrLevel );
|
|
|
|
// ADB: The current sector summary should be set to the array value, not the other way around.
|
|
// Also the sector X and Y values are 1-based and the array is 0-based. So subtract 1 from X and Y
|
|
gpCurrentSectorSummary = gpSectorSummary[ gsSelSectorX - 1][ gsSelSectorY - 1][ giCurrLevel ];
|
|
|
|
gfRenderSummary = TRUE;
|
|
if(gfItemDetailsMode)//dnl ch81 041213
|
|
gfSetupItemDetailsMode = TRUE;
|
|
|
|
RemoveProgressBar( 0 );
|
|
}
|
|
}
|
|
|
|
void ExtractTempFilename()
|
|
{
|
|
//dnl ch39 190909
|
|
CHAR16 str[FILENAME_BUFLEN-4];
|
|
Get16BitStringFromField(1, str, FILENAME_BUFLEN-4);
|
|
if( wcscmp( gszTempFilename, str ) )
|
|
{
|
|
wcscpy( gszTempFilename, str );
|
|
gfRenderSummary = TRUE;
|
|
gfOverrideDirty = TRUE;
|
|
}
|
|
if( !wcslen( str ) )
|
|
swprintf( gszDisplayName, L"test.dat" );
|
|
}
|
|
|
|
//dnl ch30 170909
|
|
BOOLEAN ReEvaluateWorld(const STR8 puiFilename)
|
|
{
|
|
UINT8 ubLevel;
|
|
CHAR8 name[FILENAME_BUFLEN];//dnl ch81 021213
|
|
INT16 sSectorX, sSectorY;
|
|
INT8 bSectorZ;
|
|
BOOLEAN fAltMap;
|
|
CHAR16 szFileName[FILENAME_BUFLEN];//dnl ch81 021213
|
|
swprintf(szFileName, L"%S", puiFilename);
|
|
GetSectorFromFileName(szFileName, sSectorX, sSectorY, bSectorZ, fAltMap);
|
|
/*
|
|
switch(bSector)
|
|
{
|
|
case 1:
|
|
ubLevel = 1;
|
|
if(fAltMap)
|
|
ubLevel = 5;
|
|
break;
|
|
case 2:
|
|
ubLevel = 2;
|
|
if(fAltMap)
|
|
ubLevel = 6;
|
|
break;
|
|
case 3:
|
|
ubLevel = 3;
|
|
if(fAltMap)
|
|
ubLevel = 7;
|
|
break;
|
|
default:
|
|
ubLevel = 0;
|
|
if(fAltMap)
|
|
ubLevel = 4;
|
|
break;
|
|
}
|
|
*/
|
|
ubLevel = bSectorZ;
|
|
if(fAltMap)
|
|
ubLevel += 4;
|
|
if(sSectorX)
|
|
sprintf(name, "%c%d", (sSectorY-1+'A'), sSectorX);
|
|
else
|
|
strcpy(name, puiFilename);
|
|
if(!EvaluateWorld(name, ubLevel))
|
|
return(FALSE);
|
|
return(TRUE);
|
|
}
|
|
|
|
void ApologizeOverrideAndForceUpdateEverything()
|
|
{
|
|
INT32 x, y;
|
|
CHAR16 str[ 128 ];
|
|
CHAR8 name[50];
|
|
SUMMARYFILE *pSF;
|
|
//Create one huge assed button
|
|
gfMajorUpdate = TRUE;
|
|
iSummaryButton[ SUMMARY_BACKGROUND ] =
|
|
CreateTextButton( 0, 0, 0, 0, BUTTON_USE_DEFAULT, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH - 1,
|
|
BUTTON_NO_CALLBACK, BUTTON_NO_CALLBACK );
|
|
SpecifyDisabledButtonStyle( iSummaryButton[ SUMMARY_BACKGROUND ], DISABLED_STYLE_NONE );
|
|
DisableButton( iSummaryButton[ SUMMARY_BACKGROUND ] );
|
|
//Draw it
|
|
DrawButton( iSummaryButton[ SUMMARY_BACKGROUND ] );
|
|
InvalidateRegion( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
SetFont( GetHugeFont() );
|
|
SetFontForeground( FONT_RED );
|
|
SetFontShadow( FONT_NEARBLACK );
|
|
swprintf( str, pApologizeOverrideAndForceUpdateEverythingText[0] );
|
|
mprintf( (iScreenWidthOffset + 320) - StringPixLength( str, GetHugeFont() )/2, iScreenHeightOffset + 105, str );
|
|
SetFont( FONT10ARIAL );
|
|
SetFontForeground( FONT_YELLOW );
|
|
swprintf( str, pApologizeOverrideAndForceUpdateEverythingText[1], gusNumberOfMapsToBeForceUpdated );
|
|
mprintf( (iScreenWidthOffset + 320) - StringPixLength( str, FONT10ARIAL )/2, iScreenHeightOffset + 130, str );
|
|
|
|
CreateProgressBar( 2, iScreenWidthOffset + 120, iScreenHeightOffset + 170, iScreenWidthOffset + 520, iScreenHeightOffset + 202 );
|
|
DefineProgressBarPanel( 2, 65, 79, 94, iScreenWidthOffset + 100, iScreenHeightOffset + 150, iScreenWidthOffset + 540, iScreenHeightOffset + 222 );
|
|
SetProgressBarTitle( 2, pApologizeOverrideAndForceUpdateEverythingText[2], BLOCKFONT2, FONT_RED, 0 );
|
|
SetProgressBarMsgAttributes( 2, SMALLCOMPFONT, FONT_BLACK, FONT_BLACK );
|
|
|
|
gusCurrent = 0;
|
|
gusTotal = gusNumberOfMapsToBeForceUpdated;
|
|
gfUpdatingNow = TRUE;
|
|
UpdateMasterProgress();
|
|
|
|
for( y = 0; y < 16; y++ ) for( x = 0; x < 16; x++ )
|
|
{
|
|
sprintf( name, "%c%d", y + 'A', x + 1 );
|
|
if( gbSectorLevels[x][y] & GROUND_LEVEL_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][0];
|
|
if( !pSF || pSF->ubSummaryVersion < MINIMUMVERSION || pSF->dMajorMapVersion < gdMajorMapVersion )
|
|
{
|
|
gpCurrentSectorSummary = pSF;
|
|
if( !EvaluateWorld( name, 0 ) )
|
|
return;
|
|
}
|
|
}
|
|
if( gbSectorLevels[x][y] & BASEMENT1_LEVEL_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][1];
|
|
if( !pSF || pSF->ubSummaryVersion < MINIMUMVERSION || pSF->dMajorMapVersion < gdMajorMapVersion )
|
|
{
|
|
gpCurrentSectorSummary = pSF;
|
|
if( !EvaluateWorld( name, 1 ) )
|
|
return;
|
|
}
|
|
}
|
|
if( gbSectorLevels[x][y] & BASEMENT2_LEVEL_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][2];
|
|
if( !pSF || pSF->ubSummaryVersion < MINIMUMVERSION || pSF->dMajorMapVersion < gdMajorMapVersion )
|
|
{
|
|
gpCurrentSectorSummary = pSF;
|
|
if( !EvaluateWorld( name, 2 ) )
|
|
return;
|
|
}
|
|
}
|
|
if( gbSectorLevels[x][y] & BASEMENT3_LEVEL_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][3];
|
|
if( !pSF || pSF->ubSummaryVersion < MINIMUMVERSION || pSF->dMajorMapVersion < gdMajorMapVersion )
|
|
{
|
|
gpCurrentSectorSummary = pSF;
|
|
if( !EvaluateWorld( name, 3 ) )
|
|
return;
|
|
}
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_GROUND_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][4];
|
|
if( !pSF || pSF->ubSummaryVersion < MINIMUMVERSION || pSF->dMajorMapVersion < gdMajorMapVersion )
|
|
{
|
|
gpCurrentSectorSummary = pSF;
|
|
if( !EvaluateWorld( name, 4 ) )
|
|
return;
|
|
}
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B1_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][5];
|
|
if( !pSF || pSF->ubSummaryVersion < MINIMUMVERSION || pSF->dMajorMapVersion < gdMajorMapVersion )
|
|
{
|
|
gpCurrentSectorSummary = pSF;
|
|
if( !EvaluateWorld( name, 5 ) )
|
|
return;
|
|
}
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B2_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][6];
|
|
if( !pSF || pSF->ubSummaryVersion < MINIMUMVERSION || pSF->dMajorMapVersion < gdMajorMapVersion )
|
|
{
|
|
gpCurrentSectorSummary = pSF;
|
|
if( !EvaluateWorld( name, 6 ) )
|
|
return;
|
|
}
|
|
}
|
|
if( gbSectorLevels[x][y] & ALTERNATE_B3_MASK )
|
|
{
|
|
pSF = gpSectorSummary[x][y][7];
|
|
if( !pSF || pSF->ubSummaryVersion < MINIMUMVERSION || pSF->dMajorMapVersion < gdMajorMapVersion )
|
|
{
|
|
gpCurrentSectorSummary = pSF;
|
|
if( !EvaluateWorld( name, 7 ) )
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
// ADB: The call to EvaluateWorld does not use the .dat extension
|
|
EvaluateWorld( "A9", 0 );
|
|
|
|
RemoveProgressBar( 2 );
|
|
gfUpdatingNow = FALSE;
|
|
InvalidateScreen();
|
|
|
|
RemoveButton( iSummaryButton[ SUMMARY_BACKGROUND ] );
|
|
gfMajorUpdate = FALSE;
|
|
gfMustForceUpdateAllMaps = FALSE;
|
|
gusNumberOfMapsToBeForceUpdated = 0;
|
|
}
|
|
|
|
void SetupItemDetailsMode(BOOLEAN fAllowRecursion)
|
|
{
|
|
UINT32 uiNumItems, uiFileSize, uiBytesRead;
|
|
INT32 i, j;
|
|
UINT16 usNumItems, usPEnemyIndex, usNEnemyIndex;
|
|
UINT8 ubMinorMapVersion;
|
|
INT8 *pBuffer, *pBufferHead;
|
|
CHAR8 szFilename[40];
|
|
HWFILE hfile;
|
|
FLOAT dMajorMapVersion;
|
|
OBJECTTYPE *pItem;
|
|
BASIC_SOLDIERCREATE_STRUCT basic;
|
|
SOLDIERCREATE_STRUCT priority;
|
|
|
|
//Clear memory for all the item summaries loaded
|
|
if(gpWorldItemsSummaryArray)
|
|
{
|
|
delete[] gpWorldItemsSummaryArray;
|
|
gpWorldItemsSummaryArray = NULL;
|
|
gusWorldItemsSummaryArraySize = 0;
|
|
}
|
|
if(gpPEnemyItemsSummaryArray)
|
|
{
|
|
delete[] gpPEnemyItemsSummaryArray;
|
|
gpPEnemyItemsSummaryArray = NULL;
|
|
gusPEnemyItemsSummaryArraySize = 0;
|
|
}
|
|
if(gpNEnemyItemsSummaryArray)
|
|
{
|
|
delete[] gpNEnemyItemsSummaryArray;
|
|
gpNEnemyItemsSummaryArray = NULL;
|
|
gusNEnemyItemsSummaryArraySize = 0;
|
|
}
|
|
// Don't have one, so generate them
|
|
if(!gpCurrentSectorSummary->uiNumItemsPosition)
|
|
{
|
|
if(gpCurrentSectorSummary->ubSummaryVersion == GLOBAL_SUMMARY_VERSION)
|
|
gusNumEntriesWithOutdatedOrNoSummaryInfo++;
|
|
SummaryUpdateCallback(ButtonList[iSummaryButton[SUMMARY_UPDATE]], MSYS_CALLBACK_REASON_LBUTTON_UP);
|
|
if(!gpCurrentSectorSummary->uiNumItemsPosition)
|
|
return;
|
|
}
|
|
//Open the original map for the sector
|
|
sprintf(szFilename, "MAPS\\%S", gszFilename);
|
|
hfile = FileOpen(szFilename, FILE_ACCESS_READ | FILE_OPEN_EXISTING, FALSE);
|
|
if(!hfile)// The file couldn't be found!
|
|
return;
|
|
uiFileSize = FileGetSize(hfile);
|
|
if(!uiFileSize)
|
|
return;
|
|
pBuffer = (INT8*)MemAlloc(uiFileSize);
|
|
pBufferHead = pBuffer;
|
|
FileRead(hfile, pBuffer, uiFileSize, &uiBytesRead);
|
|
FileClose(hfile);
|
|
dMajorMapVersion = *(FLOAT *)pBuffer;
|
|
if(dMajorMapVersion >= 4.00)
|
|
ubMinorMapVersion = pBuffer[sizeof(FLOAT)];
|
|
else
|
|
ubMinorMapVersion = 0;
|
|
uiNumItems = 0;
|
|
if(gpCurrentSectorSummary->uiNumItemsPosition)
|
|
{
|
|
// Now fileseek directly to the file position where the number of world items are stored
|
|
SKIPDATA(pBuffer, pBufferHead, gpCurrentSectorSummary->uiNumItemsPosition);
|
|
if((UINT32)(pBuffer-pBufferHead) > uiFileSize)
|
|
{
|
|
L01:
|
|
if(fAllowRecursion)
|
|
{
|
|
gpCurrentSectorSummary->uiNumItemsPosition = 0;
|
|
SetupItemDetailsMode(FALSE);
|
|
}
|
|
return;
|
|
}
|
|
// Now load the number of world items from the map
|
|
LOADDATA(&uiNumItems, pBuffer, sizeof(UINT32));
|
|
if((UINT32)(pBuffer-pBufferHead) > uiFileSize)
|
|
goto L01;
|
|
}
|
|
// Now compare this number with the number the summary thinks we should have. If they are different, then the summary doesn't match the map. What we will do is force regenerate the map so that they do match
|
|
if(uiNumItems != gpCurrentSectorSummary->usNumItems)
|
|
goto L01;
|
|
//Passed the gauntlet, so now allocate memory for it, and load all the world items into this array.
|
|
ShowButton(iSummaryButton[SUMMARY_SCIFI]);
|
|
ShowButton(iSummaryButton[SUMMARY_REAL]);
|
|
ShowButton(iSummaryButton[SUMMARY_ENEMY]);
|
|
gpWorldItemsSummaryArray = new WORLDITEM[uiNumItems];
|
|
gusWorldItemsSummaryArraySize = gpCurrentSectorSummary->usNumItems;
|
|
for(i=0; i<(INT32)uiNumItems; i++)
|
|
gpWorldItemsSummaryArray[i].Load(&pBuffer, dMajorMapVersion, ubMinorMapVersion);
|
|
// Now, do the enemy's items! We need to do two passes. The first pass simply processes all the enemies and counts all the droppable items keeping track of two different values.
|
|
// The first value is the number of droppable items that come off of enemy detailed placements, the other counter keeps track of the number of droppable items that come off of normal enemy placements.
|
|
// After doing this, the memory is allocated for the tables that will store all the item summary information, then the second pass will repeat the process, except it will record the actual items.
|
|
// PASS #1
|
|
SKIPDATA(pBuffer, pBufferHead, gpCurrentSectorSummary->uiEnemyPlacementPosition);
|
|
for(i=0; i<gpCurrentSectorSummary->MapInfo.ubNumIndividuals; i++)
|
|
{
|
|
basic.Load(&pBuffer, dMajorMapVersion);
|
|
if((UINT32)(pBuffer-pBufferHead) > uiFileSize)
|
|
goto L01;
|
|
if(basic.fDetailedPlacement)// skip static priority placement
|
|
{
|
|
priority.Load(&pBuffer, dMajorMapVersion, ubMinorMapVersion);
|
|
if((UINT32)(pBuffer-pBufferHead) > uiFileSize)
|
|
goto L01;
|
|
}
|
|
else//non detailed placements don't have items, so skip
|
|
continue;
|
|
if(basic.bTeam == ENEMY_TEAM)
|
|
{
|
|
//Count the items that this enemy placement drops
|
|
usNumItems = 0;
|
|
for(j=0; j<9; j++)
|
|
{
|
|
pItem = &priority.Inv[gbMercSlotTypes[j]];
|
|
if(pItem->exists() == true && !((*pItem).fFlags & OBJECT_UNDROPPABLE))
|
|
usNumItems++;
|
|
}
|
|
if(basic.fPriorityExistance)
|
|
gusPEnemyItemsSummaryArraySize += usNumItems;
|
|
else
|
|
gusNEnemyItemsSummaryArraySize += usNumItems;
|
|
}
|
|
}
|
|
// Pass 1 completed, so now allocate enough space to hold all the items
|
|
if(gusPEnemyItemsSummaryArraySize)
|
|
gpPEnemyItemsSummaryArray = new OBJECTTYPE[gusPEnemyItemsSummaryArraySize];
|
|
if(gusNEnemyItemsSummaryArraySize)
|
|
gpNEnemyItemsSummaryArray = new OBJECTTYPE[ gusNEnemyItemsSummaryArraySize ];
|
|
// PASS #2
|
|
// During this pass, simply copy all the data instead of counting it, now that we have already done so
|
|
usPEnemyIndex = usNEnemyIndex = 0;
|
|
SKIPDATA(pBuffer, pBufferHead, gpCurrentSectorSummary->uiEnemyPlacementPosition);
|
|
for(i=0; i<gpCurrentSectorSummary->MapInfo.ubNumIndividuals; i++)
|
|
{
|
|
basic.Load(&pBuffer, dMajorMapVersion);
|
|
if(basic.fDetailedPlacement)// skip static priority placement
|
|
priority.Load(&pBuffer, dMajorMapVersion, ubMinorMapVersion);
|
|
else// non detailed placements don't have items, so skip
|
|
continue;
|
|
if(basic.bTeam == ENEMY_TEAM)
|
|
{
|
|
// Copy the items that this enemy placement drops
|
|
usNumItems = 0;
|
|
for(j=0; j<9; j++)
|
|
{
|
|
pItem = &priority.Inv[gbMercSlotTypes[j]];
|
|
if(pItem->exists() == true && !((*pItem).fFlags & OBJECT_UNDROPPABLE))
|
|
{
|
|
if(basic.fPriorityExistance)
|
|
{
|
|
gpPEnemyItemsSummaryArray[usPEnemyIndex] = *pItem;
|
|
usPEnemyIndex++;
|
|
}
|
|
else
|
|
{
|
|
gpNEnemyItemsSummaryArray[usNEnemyIndex] = *pItem;
|
|
usNEnemyIndex++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
UINT8 GetCurrentSummaryVersion()
|
|
{
|
|
if( gpCurrentSectorSummary )
|
|
{
|
|
return gpCurrentSectorSummary->MapInfo.ubMapVersion;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void ClearSummaryInfo()
|
|
{
|
|
for (int x = 0; x < 16; x++)
|
|
{
|
|
for (int y=0; y < 16; y++)
|
|
{
|
|
for (int z=0; z < 8; z++)
|
|
{
|
|
if (gpSectorSummary[x][y][z])
|
|
{
|
|
MemFree( gpSectorSummary[x][y][z]);
|
|
gpSectorSummary[x][y][z] = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|