mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
- New Feature/exploit enhancement: enter hostile sector with helicopter and land mercs anywhere (see http://www.bears-pit.com/board/ubbthreads.php/topics/327879.html#Post327879)
- MP entry points are now much more and scale with mapsize git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6576 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+1
-1
@@ -1688,7 +1688,7 @@ void LoadGameExternalOptions()
|
||||
gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_SPECIAL] = iniReader.ReadInteger("Strategic Gameplay Settings","PRISONER_INTERROGATION_POINTS_SPECIAL", 100, gGameExternalOptions.ubPrisonerInterrogationPoints[PRISONER_ELITE], 1000);
|
||||
|
||||
// CHRISL: Determine how Skyrider should handle landing in enemy occupied sectors
|
||||
gGameExternalOptions.ubSkyriderHotLZ = iniReader.ReadInteger("Strategic Gameplay Settings", "ALLOW_SKYRIDER_HOT_LZ", 0);
|
||||
gGameExternalOptions.ubSkyriderHotLZ = iniReader.ReadInteger("Strategic Gameplay Settings", "ALLOW_SKYRIDER_HOT_LZ", 0, 0, 3);
|
||||
|
||||
// enable all terrorists
|
||||
gGameExternalOptions.fEnableAllTerrorists = iniReader.ReadBoolean("Strategic Gameplay Settings", "ENABLE_ALL_TERRORISTS", TRUE);
|
||||
|
||||
@@ -1040,6 +1040,9 @@ UINT8 MoveAllInHelicopterToFootMovementGroup( INT8 bNewSquad )
|
||||
pSoldier->ubStrategicInsertionCode = ubInsertionCode;
|
||||
pSoldier->usStrategicInsertionData = usInsertionData;
|
||||
}
|
||||
|
||||
// Flugente: we are leaving the helicopter and instantly deploy into combat - this must be an airdrop
|
||||
pSoldier->bSoldierFlagMask |= SOLDIER_AIRDROP;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3197,9 +3197,8 @@ void GetMercClimbDirection( UINT8 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoU
|
||||
*pfGoUp = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// IF we are higher...
|
||||
if ( pSoldier->pathing.bLevel > 0 )
|
||||
else //if ( pSoldier->pathing.bLevel > 0 )
|
||||
{
|
||||
if ( FindLowerLevel( pSoldier, pSoldier->sGridNo, pSoldier->ubDirection, &bNewDirection ) )
|
||||
{
|
||||
|
||||
+30
-37
@@ -386,10 +386,6 @@ BOOLEAN gfFirstHeliRun;
|
||||
|
||||
void HandleFirstHeliDropOfGame( );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void ResetHeliSeats( )
|
||||
{
|
||||
gbNumHeliSeatsOccupied = 0;
|
||||
@@ -415,13 +411,16 @@ void AddMercToHeli( UINT8 ubID )
|
||||
}
|
||||
}
|
||||
|
||||
// Flugente: we might want to set the helicopter dropoff point without starting it at the same time
|
||||
void SetHelicopterDroppoint( INT32 sGridNo )
|
||||
{
|
||||
gsGridNoSweetSpot = sGridNo;
|
||||
}
|
||||
|
||||
void StartHelicopterRun( INT32 sGridNoSweetSpot )
|
||||
void StartHelicopterRun()
|
||||
{
|
||||
INT16 sX, sY;
|
||||
|
||||
gsGridNoSweetSpot = sGridNoSweetSpot;
|
||||
|
||||
|
||||
if ( gbNumHeliSeatsOccupied == 0 )
|
||||
{
|
||||
return;
|
||||
@@ -431,7 +430,7 @@ void StartHelicopterRun( INT32 sGridNoSweetSpot )
|
||||
PauseGame();
|
||||
LockPauseState( 20 );
|
||||
|
||||
ConvertGridNoToCenterCellXY( sGridNoSweetSpot, &sX, &sY );
|
||||
ConvertGridNoToCenterCellXY( gsGridNoSweetSpot, &sX, &sY );
|
||||
|
||||
gsHeliXPos = sX - ( 2 * CELL_X_SIZE );
|
||||
gsHeliYPos = sY - ( 10 * CELL_Y_SIZE );
|
||||
@@ -444,15 +443,14 @@ void StartHelicopterRun( INT32 sGridNoSweetSpot )
|
||||
gbHeliRound = 1;
|
||||
|
||||
gubHeliState = HELI_APPROACH;
|
||||
guiHeliLastUpdate = GetJA2Clock( );
|
||||
guiHeliLastUpdate = GetJA2Clock( );
|
||||
|
||||
// Start sound
|
||||
uiSoundSample = PlayJA2Sample( HELI_1, RATE_11025, 0, 10000, MIDDLEPAN );
|
||||
fFadingHeliIn = TRUE;
|
||||
|
||||
gfHandleHeli = TRUE;
|
||||
|
||||
gfFirstGuyDown = TRUE;
|
||||
gfHandleHeli = TRUE;
|
||||
gfFirstGuyDown = TRUE;
|
||||
|
||||
guiPendingOverrideEvent = LU_BEGINUILOCK;
|
||||
}
|
||||
@@ -462,12 +460,10 @@ void HandleHeliDrop( )
|
||||
{
|
||||
UINT8 ubScriptCode;
|
||||
UINT32 uiClock;
|
||||
//INT16 sWorldX, sWorldY;
|
||||
INT32 iVol;
|
||||
INT32 cnt;
|
||||
ANITILE_PARAMS AniParams;
|
||||
|
||||
|
||||
|
||||
if ( gfHandleHeli )
|
||||
{
|
||||
if ( gCurrentUIMode != LOCKUI_MODE )
|
||||
@@ -503,7 +499,7 @@ void HandleHeliDrop( )
|
||||
// Remove heli
|
||||
DeleteAniTile( gpHeli );
|
||||
|
||||
RebuildCurrentSquad( );
|
||||
RebuildCurrentSquad( );
|
||||
|
||||
// Remove sound
|
||||
if( uiSoundSample!=NO_SAMPLE )
|
||||
@@ -559,7 +555,7 @@ void HandleHeliDrop( )
|
||||
// Remove heli
|
||||
DeleteAniTile( gpHeli );
|
||||
|
||||
RebuildCurrentSquad( );
|
||||
RebuildCurrentSquad( );
|
||||
|
||||
// Remove sound
|
||||
if( uiSoundSample!=NO_SAMPLE )
|
||||
@@ -603,7 +599,7 @@ void HandleHeliDrop( )
|
||||
iVol=__min( HIGHVOLUME, iVol+5);
|
||||
SoundSetVolume(uiSoundSample, iVol);
|
||||
if(iVol==HIGHVOLUME)
|
||||
fFadingHeliIn=FALSE;
|
||||
fFadingHeliIn=FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -631,7 +627,7 @@ void HandleHeliDrop( )
|
||||
UnLockPauseState();
|
||||
UnPauseGame();
|
||||
|
||||
RebuildCurrentSquad( );
|
||||
RebuildCurrentSquad( );
|
||||
|
||||
HandleFirstHeliDropOfGame( );
|
||||
}
|
||||
@@ -646,7 +642,7 @@ void HandleHeliDrop( )
|
||||
UnLockPauseState();
|
||||
UnPauseGame();
|
||||
|
||||
RebuildCurrentSquad( );
|
||||
RebuildCurrentSquad( );
|
||||
|
||||
HandleFirstHeliDropOfGame( );
|
||||
}
|
||||
@@ -681,15 +677,9 @@ void HandleHeliDrop( )
|
||||
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->EVENT_InitNewSoldierAnim( HELIDROP, 0 , FALSE );
|
||||
|
||||
// Change insertion code
|
||||
#ifdef JA2UB
|
||||
//MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH;
|
||||
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
|
||||
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO;
|
||||
#else
|
||||
//MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH;
|
||||
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
|
||||
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation;
|
||||
#endif
|
||||
MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usStrategicInsertionData = gsGridNoSweetSpot;
|
||||
|
||||
// HEADROCK HAM 3.5: Externalized!
|
||||
UpdateMercInSector( MercPtrs[ gusHeliSeats[ gbCurDrop ] ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ );
|
||||
//EVENT_SetSoldierPosition( MercPtrs[ gusHeliSeats[ gbCurDrop ] ], sWorldX, sWorldY );
|
||||
@@ -876,9 +866,8 @@ void BeginMercEntering( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
ResetHeliSeats( );
|
||||
|
||||
AddMercToHeli( pSoldier->ubID );
|
||||
|
||||
|
||||
StartHelicopterRun( sGridNo );
|
||||
|
||||
StartHelicopterRun();
|
||||
|
||||
// Make sure AI does nothing.....
|
||||
PauseAIUntilManuallyUnpaused();
|
||||
@@ -887,13 +876,19 @@ void BeginMercEntering( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
|
||||
void HandleFirstHeliDropOfGame( )
|
||||
{
|
||||
// Flugente: always call people to area
|
||||
CallAvailableEnemiesTo( gsGridNoSweetSpot );
|
||||
|
||||
// Are we in the first heli drop?
|
||||
if ( gfFirstHeliRun )
|
||||
{
|
||||
SyncStrategicTurnTimes();
|
||||
#ifdef JA2UB
|
||||
SetHelicopterDroppoint( gGameUBOptions.LOCATEGRIDNO );
|
||||
#else
|
||||
SetHelicopterDroppoint( gGameExternalOptions.iInitialMercArrivalLocation );
|
||||
#endif
|
||||
|
||||
// Call people to area
|
||||
CallAvailableEnemiesTo( gsGridNoSweetSpot );
|
||||
SyncStrategicTurnTimes();
|
||||
|
||||
// Move to header file...
|
||||
// HEADROCK HAM 3.5: Externalized!
|
||||
@@ -935,12 +930,10 @@ void HandleFirstHeliDropOfGame( )
|
||||
}
|
||||
|
||||
gfFirstHeliRun = FALSE;
|
||||
|
||||
}
|
||||
|
||||
// Send message to turn on ai again....
|
||||
CharacterDialogueWithSpecialEvent( 0, 0, 0, DIALOGUE_TACTICAL_UI , FALSE , FALSE , DIALOGUE_SPECIAL_EVENT_ENABLE_AI ,0, 0 );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
+23
-11
@@ -22,6 +22,7 @@
|
||||
#include "meanwhile.h"
|
||||
#include "Exit Grids.h"
|
||||
#include "Interface.h" // added by Flugente for zBackground
|
||||
#include "renderworld.h" // added by Flugente
|
||||
#endif
|
||||
|
||||
#ifdef JA2UB
|
||||
@@ -1194,16 +1195,7 @@ BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOO
|
||||
sGridNo = pSoldier->sInsertionGridNo;
|
||||
}
|
||||
}
|
||||
|
||||
// Flugente backgrounds
|
||||
if ( pSoldier->ubStrategicInsertionCode == INSERTION_CODE_CENTER && pSoldier->GetBackgroundValue(BG_AIRDROP) )
|
||||
{
|
||||
fCalculateDirection = FALSE;
|
||||
pSoldier->ubInsertionDirection = Random( DIRECTION_IRRELEVANT );
|
||||
|
||||
pSoldier->bSoldierFlagMask |= SOLDIER_AIRDROP_BONUS;
|
||||
}
|
||||
|
||||
|
||||
// add this flag whenever we enter strategically enter a sector (= we attack a sector)
|
||||
pSoldier->bSoldierFlagMask |= SOLDIER_ASSAULT_BONUS;
|
||||
|
||||
@@ -1500,6 +1492,26 @@ void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDir
|
||||
fUpdateFinalPosition = FALSE;
|
||||
}
|
||||
|
||||
// Flugente: if we are airdropping, center screen on the action adn remove soldier initially. He will be dropped into the sector by the helicopter
|
||||
if ( pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
{
|
||||
pSoldier->bSoldierFlagMask &= ~SOLDIER_AIRDROP;
|
||||
|
||||
if ( gGameExternalOptions.ubSkyriderHotLZ == 3 )
|
||||
{
|
||||
gfIgnoreScrolling = FALSE;
|
||||
INT16 sNewCenterWorldX, sNewCenterWorldY;
|
||||
ConvertGridNoToCenterCellXY( sGridNo, &sNewCenterWorldX, &sNewCenterWorldY );
|
||||
|
||||
SetRenderCenter( sNewCenterWorldX, sNewCenterWorldY );
|
||||
gfIgnoreScrolling = TRUE;
|
||||
|
||||
pSoldier->RemoveSoldierFromGridNo( );
|
||||
pSoldier->bInSector = FALSE;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If this is a special insertion location, get path!
|
||||
if ( ubInsertionCode == INSERTION_CODE_ARRIVING_GAME )
|
||||
@@ -1524,7 +1536,7 @@ void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDir
|
||||
pSoldier->EVENT_SetSoldierDesiredDirection( ubDirection );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if( !(gTacticalStatus.uiFlags & LOADING_SAVED_GAME ) )
|
||||
{
|
||||
if ( !( pSoldier->flags.uiStatusFlags & SOLDIER_DEAD ) )
|
||||
|
||||
@@ -380,8 +380,8 @@ enum
|
||||
|
||||
#define SOLDIER_RADIO_OPERATOR_JAMMING 0x00100000 //1048576 // radio operator is jamming frequencies
|
||||
#define SOLDIER_RADIO_OPERATOR_SCANNING 0x00200000 //2097152 // radio operator is scanning for jammers
|
||||
/*#define PLAYER_NET_3_LVL_2 0x00400000 //4194304
|
||||
#define PLAYER_NET_4_LVL_2 0x00800000 //8388608
|
||||
#define SOLDIER_AIRDROP 0x00400000 //4194304 // soldier is entering the sector via airdrop from a helicopter
|
||||
/*#define PLAYER_NET_4_LVL_2 0x00800000 //8388608
|
||||
|
||||
#define PLAYER_NET_1_LVL_3 0x01000000 //16777216
|
||||
#define PLAYER_NET_2_LVL_3 0x02000000 //33554432
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
void ResetHeliSeats( );
|
||||
void AddMercToHeli( UINT8 ubID );
|
||||
|
||||
void StartHelicopterRun( INT32 sGridNoSweetSpot );
|
||||
// Flugente: we might want to set the helicopter dropoff point without starting it at the same time
|
||||
void SetHelicopterDroppoint( INT32 sGridNo );
|
||||
|
||||
void StartHelicopterRun();
|
||||
|
||||
void HandleHeliDrop( );
|
||||
|
||||
|
||||
extern BOOLEAN gfIngagedInDrop;
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -74,49 +74,109 @@ BOOLEAN EdgepointsClose( SOLDIERTYPE *pSoldier, INT32 sEdgepoint1, INT32 sEdgepo
|
||||
|
||||
extern UINT8 gubTacticalDirection;
|
||||
|
||||
|
||||
BOOLEAN GridNoValidForCenterEntryPoint(INT32 sGridNo)
|
||||
{
|
||||
if ( GridNoOnVisibleWorldTile( sGridNo ) && gpWorldLevelData[gMapInformation.sCenterGridNo].sHeight == gpWorldLevelData[sGridNo].sHeight && !FindStructure( sGridNo, (STRUCTURE_SLANTED_ROOF|STRUCTURE_TALL_ROOF) ) )
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#define CENTER_ENTRY_POINTS_ROW 100
|
||||
#define NUM_CENTER_ENTRY_POINTS (CENTER_ENTRY_POINTS_ROW * CENTER_ENTRY_POINTS_ROW)
|
||||
|
||||
static INT32* statCentGrid = NULL;
|
||||
static INT32 numcentergridnos = 0;
|
||||
void FillCentreGridnos(BOOLEAN fCenterOnly)
|
||||
{
|
||||
static INT16 sectorX = -1;
|
||||
static INT16 sectorY = -1;
|
||||
|
||||
// generate points only if current points are for a different map
|
||||
if ( gWorldSectorX == sectorX && gWorldSectorY == sectorY )
|
||||
return;
|
||||
|
||||
sectorX = gWorldSectorX;
|
||||
sectorY = gWorldSectorY;
|
||||
|
||||
statCentGrid = (INT32*)MemAlloc( NUM_CENTER_ENTRY_POINTS * sizeof( INT32 ) );
|
||||
|
||||
FLOAT lenx = 0.0f;
|
||||
if ( fCenterOnly )
|
||||
lenx = std::sqrt((float)(CENTERENTRYPTS_TOP_Y*CENTERENTRYPTS_TOP_Y + CENTERENTRYPTS_LEFT_X*CENTERENTRYPTS_LEFT_X));
|
||||
|
||||
FLOAT lent = std::sqrt((float)((320-3)*(320-3) + 634*634));
|
||||
FLOAT xratio = lenx/lent;
|
||||
|
||||
// top row of gridnos isn't accessible, we thus have to shorten the accessible lenghts
|
||||
INT32 world_cols_adjusted = WORLD_COLS - 3;
|
||||
INT32 world_rows_adjusted = WORLD_ROWS - 3;
|
||||
|
||||
INT32 x_base = world_cols_adjusted * xratio;
|
||||
INT32 y_base = world_rows_adjusted/2;
|
||||
|
||||
INT32 totallen = std::sqrt((float)(world_rows_adjusted * world_rows_adjusted + world_cols_adjusted * world_cols_adjusted));
|
||||
INT32 droplen = totallen * (1.0f - 2 * xratio);
|
||||
INT32 steplen = droplen / CENTER_ENTRY_POINTS_ROW;
|
||||
|
||||
UINT16 cnt = 0;
|
||||
for(UINT16 i = 0; i < CENTER_ENTRY_POINTS_ROW; ++i)
|
||||
{
|
||||
INT32 x_start = x_base + i * steplen;
|
||||
INT32 y_start = y_base + i * steplen;
|
||||
|
||||
for(UINT16 j = 0; j < CENTER_ENTRY_POINTS_ROW; ++j)
|
||||
{
|
||||
INT32 x = x_start + j * steplen;
|
||||
INT32 y = y_start - j * steplen;
|
||||
|
||||
INT32 gridno = y * WORLD_COLS + x;
|
||||
|
||||
// use gridno only if valid and if it does not have an inaccessible roof
|
||||
if ( GridNoValidForCenterEntryPoint( gridno ) )
|
||||
{
|
||||
statCentGrid[ cnt ] = gridno;
|
||||
++cnt;
|
||||
}
|
||||
else
|
||||
{
|
||||
// test wether neighbour gridnos are ok
|
||||
for(UINT8 dir = NORTH; dir < NUM_WORLD_DIRECTIONS; ++dir)
|
||||
{
|
||||
INT32 newgridno = NewGridNo(gridno, dir);
|
||||
if ( GridNoValidForCenterEntryPoint( newgridno ) )
|
||||
{
|
||||
statCentGrid[ cnt ] = newgridno;
|
||||
++cnt;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
numcentergridnos = cnt;
|
||||
}
|
||||
|
||||
// WANNE - MP: Center
|
||||
void InitCenterEdgepoint()
|
||||
void InitCenterEdgepoint(BOOLEAN fCenterOnly)
|
||||
{
|
||||
if (gps1stCenterEdgepointArray )
|
||||
MemFree( gps1stCenterEdgepointArray );
|
||||
|
||||
gps1stCenterEdgepointArray = NULL;
|
||||
|
||||
FillCentreGridnos(fCenterOnly);
|
||||
|
||||
// Set some center points
|
||||
gus1stCenterEdgepointArraySize = 30;
|
||||
gus1stCenterEdgepointArraySize = numcentergridnos;
|
||||
|
||||
gps1stCenterEdgepointArray = (INT32*)MemAlloc( gus1stCenterEdgepointArraySize * sizeof( INT32 ) );
|
||||
|
||||
gps1stCenterEdgepointArray[ 0 ] = 13024;
|
||||
gps1stCenterEdgepointArray[ 1 ] = 13507;
|
||||
gps1stCenterEdgepointArray[ 2 ] = 13990;
|
||||
gps1stCenterEdgepointArray[ 3 ] = 14473;
|
||||
gps1stCenterEdgepointArray[ 4 ] = 15117;
|
||||
gps1stCenterEdgepointArray[ 5 ] = 12547;
|
||||
gps1stCenterEdgepointArray[ 6 ] = 13030;
|
||||
gps1stCenterEdgepointArray[ 7 ] = 13513;
|
||||
gps1stCenterEdgepointArray[ 8 ] = 13996;
|
||||
gps1stCenterEdgepointArray[ 9 ] = 14479;
|
||||
gps1stCenterEdgepointArray[ 10 ] = 12070;
|
||||
gps1stCenterEdgepointArray[ 11 ] = 12553;
|
||||
gps1stCenterEdgepointArray[ 12 ] = 13036;
|
||||
gps1stCenterEdgepointArray[ 13 ] = 13519;
|
||||
gps1stCenterEdgepointArray[ 14 ] = 14002;
|
||||
gps1stCenterEdgepointArray[ 15 ] = 11593;
|
||||
gps1stCenterEdgepointArray[ 16 ] = 12076;
|
||||
gps1stCenterEdgepointArray[ 17 ] = 12559;
|
||||
gps1stCenterEdgepointArray[ 18 ] = 13042;
|
||||
gps1stCenterEdgepointArray[ 19 ] = 13525;
|
||||
gps1stCenterEdgepointArray[ 20 ] = 11117;
|
||||
gps1stCenterEdgepointArray[ 21 ] = 11600;
|
||||
gps1stCenterEdgepointArray[ 22 ] = 12083;
|
||||
gps1stCenterEdgepointArray[ 23 ] = 12566;
|
||||
gps1stCenterEdgepointArray[ 24 ] = 13049;
|
||||
gps1stCenterEdgepointArray[ 25 ] = 10640;
|
||||
gps1stCenterEdgepointArray[ 26 ] = 11123;
|
||||
gps1stCenterEdgepointArray[ 27 ] = 11606;
|
||||
gps1stCenterEdgepointArray[ 28 ] = 12089;
|
||||
gps1stCenterEdgepointArray[ 29 ] = 12572;
|
||||
for(UINT16 i = 0; i < numcentergridnos; ++i)
|
||||
gps1stCenterEdgepointArray[i] = statCentGrid[i];
|
||||
}
|
||||
|
||||
void TrashMapEdgepoints()
|
||||
@@ -149,8 +209,7 @@ void TrashMapEdgepoints()
|
||||
gus1stEastEdgepointMiddleIndex = 0;
|
||||
gus1stSouthEdgepointMiddleIndex = 0;
|
||||
gus1stWestEdgepointMiddleIndex = 0;
|
||||
|
||||
|
||||
|
||||
//Secondary edgepoints
|
||||
if( gps2ndNorthEdgepointArray )
|
||||
MemFree( gps2ndNorthEdgepointArray );
|
||||
@@ -1052,9 +1111,9 @@ INT32 ChooseMapEdgepoint( UINT8 *ubStrategicInsertionCode, UINT8 lastValidICode
|
||||
if( *ubStrategicInsertionCode == INSERTION_CODE_GRIDNO)
|
||||
*ubStrategicInsertionCode = lastValidICode;
|
||||
|
||||
if (is_networked && *ubStrategicInsertionCode == INSERTION_CODE_CENTER)
|
||||
if ( (is_networked && *ubStrategicInsertionCode == INSERTION_CODE_CENTER) || *ubStrategicInsertionCode == INSERTION_CODE_CHOPPER )
|
||||
{
|
||||
InitCenterEdgepoint();
|
||||
InitCenterEdgepoint( *ubStrategicInsertionCode == INSERTION_CODE_CENTER );
|
||||
|
||||
psArray = gps1stCenterEdgepointArray;
|
||||
usArraySize = gus1stCenterEdgepointArraySize;
|
||||
@@ -1339,9 +1398,9 @@ INT32 SearchForClosestPrimaryMapEdgepoint(INT32 sGridNo, UINT8 ubInsertionCode,
|
||||
break;
|
||||
}
|
||||
// WANNE - MP: Center
|
||||
if(is_networked && ubInsertionCode == INSERTION_CODE_CENTER)
|
||||
if( (is_networked && ubInsertionCode == INSERTION_CODE_CENTER) || ubInsertionCode == INSERTION_CODE_CHOPPER )
|
||||
{
|
||||
InitCenterEdgepoint();
|
||||
InitCenterEdgepoint( ubInsertionCode == INSERTION_CODE_CENTER );
|
||||
psArray = gps1stCenterEdgepointArray;
|
||||
usArraySize = gus1stCenterEdgepointArraySize;
|
||||
}
|
||||
|
||||
@@ -86,6 +86,15 @@ void ShowMapEdgepoints();
|
||||
void HideMapEdgepoints();
|
||||
#endif
|
||||
|
||||
// Flugente: hardcoded values are bad bad BAD
|
||||
#define CENTERENTRYPTS_LEFT_X 250
|
||||
#define CENTERENTRYPTS_RIGHT_X (634 - CENTERENTRYPTS_LEFT_X)
|
||||
#define CENTERENTRYPTS_TOP_Y 130
|
||||
#define CENTERENTRYPTS_BOTTOM_Y (320 - CENTERENTRYPTS_TOP_Y)
|
||||
|
||||
#define AIRDROPENTRYPTS_LEFT_X 0
|
||||
#define AIRDROPENTRYPTS_RIGHT_X (634 - AIRDROPENTRYPTS_LEFT_X)
|
||||
#define AIRDROPENTRYPTS_TOP_Y 0
|
||||
#define AIRDROPENTRYPTS_BOTTOM_Y (320 - AIRDROPENTRYPTS_TOP_Y)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "saveloadscreen.h"
|
||||
#include "Map Edgepoints.h"
|
||||
#include "renderworld.h"//dnl ch45 051009
|
||||
#include "merc entering.h"
|
||||
|
||||
typedef struct MERCPLACEMENT
|
||||
{
|
||||
@@ -113,8 +114,6 @@ INT8 gbCursorMercID = -1;
|
||||
SOLDIERTYPE *gpTacticalPlacementSelectedSoldier = NULL;
|
||||
SOLDIERTYPE *gpTacticalPlacementHilightedSoldier = NULL;
|
||||
|
||||
BOOLEAN gfNorth, gfEast, gfSouth, gfWest;
|
||||
|
||||
// WANNE - MP: Center
|
||||
BOOLEAN gfCenter;
|
||||
|
||||
@@ -129,7 +128,6 @@ void FastHelpRemovedCallback();
|
||||
void FastHelpRemoved2Callback();
|
||||
void DialogRemoved( UINT8 ubResult );
|
||||
|
||||
|
||||
void PutDownMercPiece( INT32 iPlacement );
|
||||
void PickUpMercPiece( INT32 iPlacement );
|
||||
void SetCursorMerc( INT8 bPlacementID );
|
||||
@@ -141,8 +139,6 @@ void SelectNextUnplacedUnit();
|
||||
BOOLEAN gfNorthValid, gfEastValid, gfSouthValid, gfWestValid;
|
||||
BOOLEAN gfChangedEntrySide = FALSE;
|
||||
|
||||
|
||||
|
||||
void FindValidInsertionCode( UINT8 *pubStrategicInsertionCode )
|
||||
{
|
||||
if( gMapInformation.sNorthGridNo == -1 &&
|
||||
@@ -237,6 +233,7 @@ void CheckForValidMapEdge( UINT8 *pubStrategicInsertionCode )
|
||||
|
||||
//#endif
|
||||
|
||||
extern BOOLEAN gfTacticalDoHeliRun;
|
||||
|
||||
void InitTacticalPlacementGUI()
|
||||
{
|
||||
@@ -250,7 +247,7 @@ void InitTacticalPlacementGUI()
|
||||
gfTacticalPlacementFirstTime = TRUE;
|
||||
|
||||
// WANNE - MP: Center
|
||||
gfNorth = gfEast = gfSouth = gfWest = gfCenter = FALSE;
|
||||
gfCenter = FALSE;
|
||||
#ifdef JA2BETAVERSION
|
||||
gfNorthValid = gfEastValid = gfSouthValid = gfWestValid = FALSE;
|
||||
gfChangedEntrySide = FALSE;
|
||||
@@ -356,7 +353,7 @@ void InitTacticalPlacementGUI()
|
||||
Assert( gMercPlacement );
|
||||
//Second pass: Assign the mercs to their respective slots.
|
||||
giPlacements = 0;
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !MercPtrs[ i ]->flags.fBetweenSectors &&
|
||||
MercPtrs[ i ]->sSectorX == gpBattleGroup->ubSectorX &&
|
||||
@@ -366,6 +363,15 @@ void InitTacticalPlacementGUI()
|
||||
!( MercPtrs[ i ]->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) && // ATE Ignore vehicles
|
||||
!MercPtrs[ i ]->bSectorZ )
|
||||
{
|
||||
// Flugente: if options allow it and we entered this sector - in combat - via helicopter, then allow us free selection of our entry point, and drop us from the helicopter
|
||||
if ( MercPtrs[ i ]->bTeam == gbPlayerNum && gGameExternalOptions.ubSkyriderHotLZ == 3 && MercPtrs[ i ]->bSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
{
|
||||
AddMercToHeli( MercPtrs[ i ]->ubID );
|
||||
|
||||
gMercPlacement[ giPlacements ].ubStrategicInsertionCode = INSERTION_CODE_CHOPPER;
|
||||
MercPtrs[ i ]->ubStrategicInsertionCode = INSERTION_CODE_CHOPPER;
|
||||
gfCenter = TRUE;
|
||||
}
|
||||
|
||||
// WANNE - MP: Check if the desired insertion direction is valid on the map. If not, choose another entry direction!
|
||||
if (is_networked)
|
||||
@@ -389,29 +395,13 @@ void InitTacticalPlacementGUI()
|
||||
|
||||
// WANNE: We always want to have edgepoints
|
||||
CheckForValidMapEdge( &MercPtrs[ i ]->ubStrategicInsertionCode );
|
||||
|
||||
switch( MercPtrs[ i ]->ubStrategicInsertionCode )
|
||||
{
|
||||
case INSERTION_CODE_NORTH:
|
||||
gfNorth = TRUE;
|
||||
break;
|
||||
case INSERTION_CODE_EAST:
|
||||
gfEast = TRUE;
|
||||
break;
|
||||
case INSERTION_CODE_SOUTH:
|
||||
gfSouth = TRUE;
|
||||
break;
|
||||
case INSERTION_CODE_WEST:
|
||||
gfWest = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
// WANNE - MP: Center
|
||||
if (is_networked && MercPtrs[ i ]->ubStrategicInsertionCode == INSERTION_CODE_CENTER)
|
||||
{
|
||||
gfCenter = TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
giPlacements++;
|
||||
}
|
||||
}
|
||||
@@ -421,35 +411,25 @@ void InitTacticalPlacementGUI()
|
||||
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
||||
|
||||
//Load the faces
|
||||
{
|
||||
|
||||
ubFaceIndex = gMercProfiles[ gMercPlacement[ i ].pSoldier->ubProfile ].ubFaceIndex;
|
||||
|
||||
/*
|
||||
if( ubFaceIndex < 100 )
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%02d.sti", ubFaceIndex );
|
||||
else
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%03d.sti", ubFaceIndex );
|
||||
|
||||
*/
|
||||
|
||||
if ( ( ubFaceIndex < 100 ) && ( gProfilesIMP[ gMercPlacement[ i ].pSoldier->ubProfile ].ProfilId == gMercPlacement[ i ].pSoldier->ubProfile ) )
|
||||
{
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%02d.sti", ubFaceIndex );
|
||||
}
|
||||
else if ( ( ubFaceIndex > 99 ) && ( gProfilesIMP[ gMercPlacement[ i ].pSoldier->ubProfile ].ProfilId == gMercPlacement[ i ].pSoldier->ubProfile ) )
|
||||
{
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%03d.sti", ubFaceIndex );
|
||||
}
|
||||
else if( ubFaceIndex < 100 )
|
||||
{
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%02d.sti", ubFaceIndex );
|
||||
}
|
||||
else if( ubFaceIndex > 99 )
|
||||
{
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%03d.sti", ubFaceIndex );
|
||||
}
|
||||
|
||||
ubFaceIndex = gMercProfiles[ gMercPlacement[ i ].pSoldier->ubProfile ].ubFaceIndex;
|
||||
|
||||
if ( ( ubFaceIndex < 100 ) && ( gProfilesIMP[ gMercPlacement[ i ].pSoldier->ubProfile ].ProfilId == gMercPlacement[ i ].pSoldier->ubProfile ) )
|
||||
{
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%02d.sti", ubFaceIndex );
|
||||
}
|
||||
else if ( ( ubFaceIndex > 99 ) && ( gProfilesIMP[ gMercPlacement[ i ].pSoldier->ubProfile ].ProfilId == gMercPlacement[ i ].pSoldier->ubProfile ) )
|
||||
{
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%03d.sti", ubFaceIndex );
|
||||
}
|
||||
else if( ubFaceIndex < 100 )
|
||||
{
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%02d.sti", ubFaceIndex );
|
||||
}
|
||||
else if( ubFaceIndex > 99 )
|
||||
{
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%03d.sti", ubFaceIndex );
|
||||
}
|
||||
}
|
||||
|
||||
if( !AddVideoObject( &VObjectDesc, &gMercPlacement[ i ].uiVObjectID ) )
|
||||
@@ -461,7 +441,6 @@ void InitTacticalPlacementGUI()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
xp = (xResOffset) + 91 + (i / 2) * 54;
|
||||
|
||||
if (i % 2)
|
||||
@@ -477,8 +456,8 @@ void InitTacticalPlacementGUI()
|
||||
MSYS_DefineRegion( &gMercPlacement[ i ].region, (UINT16)xp, (UINT16)yp, (UINT16)(xp + 54), (UINT16)(yp + 62), MSYS_PRIORITY_HIGH, 0, MercMoveCallback, MercClickCallback );
|
||||
}
|
||||
|
||||
|
||||
if(!is_client)PlaceMercs();//hayden
|
||||
if(!is_client)
|
||||
PlaceMercs();//hayden
|
||||
|
||||
if( gubDefaultButton == GROUP_BUTTON )
|
||||
{
|
||||
@@ -541,6 +520,11 @@ UINT8 GetValidInsertionDirectionForMP(UINT8 currentInsertionPoint)
|
||||
foundValidDirection = true;
|
||||
validInsertionDirection = INSERTION_CODE_CENTER;
|
||||
break;
|
||||
|
||||
case INSERTION_CODE_CHOPPER:
|
||||
foundValidDirection = true;
|
||||
validInsertionDirection = INSERTION_CODE_CHOPPER;
|
||||
break;
|
||||
}
|
||||
|
||||
// Find alternate insertion direction by looping through all directions (N, S, E, W)
|
||||
@@ -753,24 +737,26 @@ void RenderTacticalPlacementGUI()
|
||||
gfValidLocationsChanged--;
|
||||
|
||||
//DBrot bigger map code
|
||||
if(gfUseBiggerOverview){
|
||||
if(gfUseBiggerOverview)
|
||||
{
|
||||
BlitBufferToBuffer( guiSAVEBUFFER, FRAME_BUFFER, iOffsetHorizontal, iOffsetVertical, 1434, 716 );
|
||||
InvalidateRegion( iOffsetHorizontal, iOffsetVertical, iOffsetHorizontal + 1434, iOffsetVertical + 716 );
|
||||
gTPClipRect.iLeft = iOffsetHorizontal + 1;
|
||||
gTPClipRect.iTop = iOffsetVertical + 1;
|
||||
gTPClipRect.iBottom = iOffsetVertical + 716;// 318;
|
||||
gTPClipRect.iRight = iOffsetHorizontal + 1434; //634;
|
||||
|
||||
}else{
|
||||
BlitBufferToBuffer( guiSAVEBUFFER, FRAME_BUFFER, iOffsetHorizontal, iOffsetVertical, 640, 320 );
|
||||
InvalidateRegion( iOffsetHorizontal, iOffsetVertical, iOffsetHorizontal + 640, iOffsetVertical + 320 );
|
||||
//dnl ch45 051009
|
||||
gTPClipRect.iLeft = iOffsetHorizontal + 1;
|
||||
gTPClipRect.iTop = iOffsetVertical + 1;
|
||||
gTPClipRect.iBottom = iOffsetVertical + 318;
|
||||
gTPClipRect.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
gTPClipRect.iRight = iOffsetHorizontal + 1434; //634;
|
||||
}
|
||||
else
|
||||
{
|
||||
BlitBufferToBuffer( guiSAVEBUFFER, FRAME_BUFFER, iOffsetHorizontal, iOffsetVertical, 640, 320 );
|
||||
InvalidateRegion( iOffsetHorizontal, iOffsetVertical, iOffsetHorizontal + 640, iOffsetVertical + 320 );
|
||||
//dnl ch45 051009
|
||||
gTPClipRect.iLeft = iOffsetHorizontal + 1;
|
||||
gTPClipRect.iTop = iOffsetVertical + 1;
|
||||
gTPClipRect.iBottom = iOffsetVertical + 318;
|
||||
gTPClipRect.iRight = iOffsetHorizontal + 634;
|
||||
}
|
||||
|
||||
if( gbCursorMercID == -1 )
|
||||
{
|
||||
// WANNE - MP: Center
|
||||
@@ -780,23 +766,50 @@ void RenderTacticalPlacementGUI()
|
||||
gTPClipRectCenterLeft.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterLeft.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterLeft.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterLeft.iRight = iOffsetHorizontal + 250;
|
||||
gTPClipRectCenterLeft.iRight = iOffsetHorizontal + CENTERENTRYPTS_LEFT_X;
|
||||
|
||||
// Top black border
|
||||
gTPClipRectCenterTop.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterTop.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterTop.iBottom = iOffsetVertical + 130;
|
||||
gTPClipRectCenterTop.iBottom = iOffsetVertical + CENTERENTRYPTS_TOP_Y;
|
||||
gTPClipRectCenterTop.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
// Right black border
|
||||
gTPClipRectCenterRight.iLeft = iOffsetHorizontal + 634 - 250;
|
||||
gTPClipRectCenterRight.iLeft = iOffsetHorizontal + CENTERENTRYPTS_RIGHT_X;
|
||||
gTPClipRectCenterRight.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterRight.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterRight.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
// Bottom black border
|
||||
gTPClipRectCenterBottom.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterBottom.iTop = iOffsetVertical + 320 - 130;
|
||||
gTPClipRectCenterBottom.iTop = iOffsetVertical + CENTERENTRYPTS_BOTTOM_Y;
|
||||
gTPClipRectCenterBottom.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterBottom.iRight = iOffsetHorizontal + 634;
|
||||
}
|
||||
// Flugente airdrop
|
||||
else if ( gfCenter && gGameExternalOptions.ubSkyriderHotLZ == 3 )
|
||||
{
|
||||
// Left black border
|
||||
gTPClipRectCenterLeft.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterLeft.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterLeft.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterLeft.iRight = iOffsetHorizontal + AIRDROPENTRYPTS_LEFT_X;
|
||||
|
||||
// Top black border
|
||||
gTPClipRectCenterTop.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterTop.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterTop.iBottom = iOffsetVertical + AIRDROPENTRYPTS_TOP_Y;
|
||||
gTPClipRectCenterTop.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
// Right black border
|
||||
gTPClipRectCenterRight.iLeft = iOffsetHorizontal + AIRDROPENTRYPTS_RIGHT_X;
|
||||
gTPClipRectCenterRight.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterRight.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterRight.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
// Bottom black border
|
||||
gTPClipRectCenterBottom.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterBottom.iTop = iOffsetVertical + AIRDROPENTRYPTS_BOTTOM_Y;
|
||||
gTPClipRectCenterBottom.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterBottom.iRight = iOffsetHorizontal + 634;
|
||||
}
|
||||
@@ -848,35 +861,42 @@ void RenderTacticalPlacementGUI()
|
||||
//}
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
switch(gMercPlacement[gbCursorMercID].ubStrategicInsertionCode){
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(gMercPlacement[gbCursorMercID].ubStrategicInsertionCode)
|
||||
{
|
||||
case INSERTION_CODE_NORTH:
|
||||
if(sWorldScreenY <= PLACEMENT_OFFSET){
|
||||
sY = (PLACEMENT_OFFSET - sWorldScreenY) / 5;
|
||||
gTPClipRect.iTop += sY;
|
||||
if(sWorldScreenY <= PLACEMENT_OFFSET)
|
||||
{
|
||||
sY = (PLACEMENT_OFFSET - sWorldScreenY) / 5;
|
||||
gTPClipRect.iTop += sY;
|
||||
}
|
||||
break;
|
||||
case INSERTION_CODE_EAST:
|
||||
if((sWorldScreenX + NORMAL_MAP_SCREEN_WIDTH) >= (MAPWIDTH - PLACEMENT_OFFSET))
|
||||
{
|
||||
sX = ((sWorldScreenX + NORMAL_MAP_SCREEN_WIDTH) - (MAPWIDTH - PLACEMENT_OFFSET)) / 5;
|
||||
gTPClipRect.iRight -= sX;
|
||||
}
|
||||
break;
|
||||
case INSERTION_CODE_SOUTH:
|
||||
if((sWorldScreenY + NORMAL_MAP_SCREEN_HEIGHT) >= (MAPHEIGHT - PLACEMENT_OFFSET))
|
||||
{
|
||||
sY = ((sWorldScreenY + NORMAL_MAP_SCREEN_HEIGHT) - (MAPHEIGHT - PLACEMENT_OFFSET)) / 5;
|
||||
gTPClipRect.iBottom -= sY;
|
||||
}
|
||||
break;
|
||||
case INSERTION_CODE_WEST:
|
||||
if(sWorldScreenX <= PLACEMENT_OFFSET)
|
||||
{
|
||||
sX = (PLACEMENT_OFFSET - sWorldScreenX) / 5;
|
||||
gTPClipRect.iLeft += sX;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case INSERTION_CODE_EAST:
|
||||
if((sWorldScreenX + NORMAL_MAP_SCREEN_WIDTH) >= (MAPWIDTH - PLACEMENT_OFFSET)){
|
||||
sX = ((sWorldScreenX + NORMAL_MAP_SCREEN_WIDTH) - (MAPWIDTH - PLACEMENT_OFFSET)) / 5;
|
||||
gTPClipRect.iRight -= sX;
|
||||
}
|
||||
break;
|
||||
case INSERTION_CODE_SOUTH:
|
||||
if((sWorldScreenY + NORMAL_MAP_SCREEN_HEIGHT) >= (MAPHEIGHT - PLACEMENT_OFFSET)){
|
||||
sY = ((sWorldScreenY + NORMAL_MAP_SCREEN_HEIGHT) - (MAPHEIGHT - PLACEMENT_OFFSET)) / 5;
|
||||
gTPClipRect.iBottom -= sY;
|
||||
}
|
||||
break;
|
||||
case INSERTION_CODE_WEST:
|
||||
if(sWorldScreenX <= PLACEMENT_OFFSET){
|
||||
sX = (PLACEMENT_OFFSET - sWorldScreenX) / 5;
|
||||
gTPClipRect.iLeft += sX;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// WANNE - MP: Center
|
||||
if (is_networked && gfCenter)
|
||||
{
|
||||
@@ -884,23 +904,50 @@ void RenderTacticalPlacementGUI()
|
||||
gTPClipRectCenterLeft.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterLeft.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterLeft.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterLeft.iRight = iOffsetHorizontal + 250;
|
||||
gTPClipRectCenterLeft.iRight = iOffsetHorizontal + CENTERENTRYPTS_LEFT_X;
|
||||
|
||||
// Top black border
|
||||
gTPClipRectCenterTop.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterTop.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterTop.iBottom = iOffsetVertical + 130;
|
||||
gTPClipRectCenterTop.iBottom = iOffsetVertical + CENTERENTRYPTS_TOP_Y;
|
||||
gTPClipRectCenterTop.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
// Right black border
|
||||
gTPClipRectCenterRight.iLeft = iOffsetHorizontal + 634 - 250;
|
||||
gTPClipRectCenterRight.iLeft = iOffsetHorizontal + CENTERENTRYPTS_RIGHT_X;
|
||||
gTPClipRectCenterRight.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterRight.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterRight.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
// Bottom black border
|
||||
gTPClipRectCenterBottom.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterBottom.iTop = iOffsetVertical + 320 - 130;
|
||||
gTPClipRectCenterBottom.iTop = iOffsetVertical + CENTERENTRYPTS_BOTTOM_Y;
|
||||
gTPClipRectCenterBottom.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterBottom.iRight = iOffsetHorizontal + 634;
|
||||
}
|
||||
// Flugente airdrop
|
||||
else if ( gfCenter && gGameExternalOptions.ubSkyriderHotLZ == 3 && gbSelectedMercID >= 0 && gMercPlacement[ gbSelectedMercID ].pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
{
|
||||
// Left black border
|
||||
gTPClipRectCenterLeft.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterLeft.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterLeft.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterLeft.iRight = iOffsetHorizontal + AIRDROPENTRYPTS_LEFT_X;
|
||||
|
||||
// Top black border
|
||||
gTPClipRectCenterTop.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterTop.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterTop.iBottom = iOffsetVertical + AIRDROPENTRYPTS_TOP_Y;
|
||||
gTPClipRectCenterTop.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
// Right black border
|
||||
gTPClipRectCenterRight.iLeft = iOffsetHorizontal + AIRDROPENTRYPTS_RIGHT_X;
|
||||
gTPClipRectCenterRight.iTop = iOffsetVertical + 3;
|
||||
gTPClipRectCenterRight.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterRight.iRight = iOffsetHorizontal + 634;
|
||||
|
||||
// Bottom black border
|
||||
gTPClipRectCenterBottom.iLeft = iOffsetHorizontal;
|
||||
gTPClipRectCenterBottom.iTop = iOffsetVertical + AIRDROPENTRYPTS_BOTTOM_Y;
|
||||
gTPClipRectCenterBottom.iBottom = iOffsetVertical + 320;
|
||||
gTPClipRectCenterBottom.iRight = iOffsetHorizontal + 634;
|
||||
}
|
||||
@@ -908,7 +955,7 @@ void RenderTacticalPlacementGUI()
|
||||
|
||||
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
|
||||
|
||||
if (!gfCenter)
|
||||
if (!gfCenter || (gGameExternalOptions.ubSkyriderHotLZ == 3 && gbSelectedMercID >= 0 && !(gMercPlacement[ gbSelectedMercID ].pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP)) )
|
||||
Blt16BPPBufferLooseHatchRectWithColor( (UINT16*)pDestBuf, uiDestPitchBYTES, &gTPClipRect, usHatchColor );
|
||||
// WANNE - MP: Center
|
||||
else
|
||||
@@ -919,10 +966,9 @@ void RenderTacticalPlacementGUI()
|
||||
Blt16BPPBufferLooseHatchRectWithColor( (UINT16*)pDestBuf, uiDestPitchBYTES, &gTPClipRectCenterBottom, usHatchColor );
|
||||
}
|
||||
|
||||
|
||||
SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
||||
|
||||
if (!gfCenter)
|
||||
if (!gfCenter || (gGameExternalOptions.ubSkyriderHotLZ == 3 && gbSelectedMercID >= 0 && !(gMercPlacement[ gbSelectedMercID ].pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP)) )
|
||||
RectangleDraw( TRUE, gTPClipRect.iLeft, gTPClipRect.iTop, gTPClipRect.iRight, gTPClipRect.iBottom, usHatchColor, pDestBuf );
|
||||
else
|
||||
{
|
||||
@@ -986,7 +1032,6 @@ void RenderTacticalPlacementGUI()
|
||||
mprintf( xp, yp, pSoldier->name );
|
||||
InvalidateRegion( xp, yp, xp + width, yp + width );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void EnsureDoneButtonStatus()
|
||||
@@ -1015,35 +1060,34 @@ void EnsureDoneButtonStatus()
|
||||
|
||||
void lockui (bool unlock) //lock onluck ui for lan //hayden
|
||||
{
|
||||
if(unlock==0 && islocked==0 && is_client)
|
||||
{
|
||||
islocked=1;
|
||||
DisableButton( iTPButtons[ DONE_BUTTON ] );
|
||||
DisableButton( iTPButtons[ SPREAD_BUTTON ] );
|
||||
DisableButton( iTPButtons[ GROUP_BUTTON ] );
|
||||
DisableButton( iTPButtons[ CLEAR_BUTTON ] );
|
||||
if(unlock==0 && islocked==0 && is_client)
|
||||
{
|
||||
islocked=1;
|
||||
DisableButton( iTPButtons[ DONE_BUTTON ] );
|
||||
DisableButton( iTPButtons[ SPREAD_BUTTON ] );
|
||||
DisableButton( iTPButtons[ GROUP_BUTTON ] );
|
||||
DisableButton( iTPButtons[ CLEAR_BUTTON ] );
|
||||
|
||||
SGPRect CenterRect = { 100 + xResOffset, 100, SCREEN_WIDTH - 100 - xResOffset, 300 };
|
||||
DoMessageBox( MSG_BOX_BASIC_STYLE, MPServerMessage[8], guiCurrentScreen, MSG_BOX_FLAG_OK | MSG_BOX_FLAG_USE_CENTERING_RECT, DialogRemoved, &CenterRect );
|
||||
SGPRect CenterRect = { 100 + xResOffset, 100, SCREEN_WIDTH - 100 - xResOffset, 300 };
|
||||
DoMessageBox( MSG_BOX_BASIC_STYLE, MPServerMessage[8], guiCurrentScreen, MSG_BOX_FLAG_OK | MSG_BOX_FLAG_USE_CENTERING_RECT, DialogRemoved, &CenterRect );
|
||||
|
||||
//send loaded
|
||||
send_loaded();
|
||||
}
|
||||
//send loaded
|
||||
send_loaded();
|
||||
}
|
||||
|
||||
if(unlock) //oh yeah ! :)
|
||||
{
|
||||
islocked=3;
|
||||
EnableButton( iTPButtons[ SPREAD_BUTTON ] );
|
||||
EnableButton( iTPButtons[ GROUP_BUTTON ] );
|
||||
EnableButton( iTPButtons[ CLEAR_BUTTON ] );
|
||||
if(unlock) //oh yeah ! :)
|
||||
{
|
||||
islocked=3;
|
||||
EnableButton( iTPButtons[ SPREAD_BUTTON ] );
|
||||
EnableButton( iTPButtons[ GROUP_BUTTON ] );
|
||||
EnableButton( iTPButtons[ CLEAR_BUTTON ] );
|
||||
|
||||
ButtonList[ iTPButtons[ GROUP_BUTTON ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
|
||||
ButtonList[ iTPButtons[ GROUP_BUTTON ] ]->uiFlags |= BUTTON_DIRTY;
|
||||
gubDefaultButton = CLEAR_BUTTON;
|
||||
PlaceMercs();
|
||||
gMsgBox.bHandled = MSG_BOX_RETURN_OK; //close if still open
|
||||
|
||||
}
|
||||
ButtonList[ iTPButtons[ GROUP_BUTTON ] ]->uiFlags &= ~BUTTON_CLICKED_ON;
|
||||
ButtonList[ iTPButtons[ GROUP_BUTTON ] ]->uiFlags |= BUTTON_DIRTY;
|
||||
gubDefaultButton = CLEAR_BUTTON;
|
||||
PlaceMercs();
|
||||
gMsgBox.bHandled = MSG_BOX_RETURN_OK; //close if still open
|
||||
}
|
||||
}
|
||||
|
||||
void TacticalPlacementHandle()
|
||||
@@ -1070,34 +1114,34 @@ void TacticalPlacementHandle()
|
||||
{
|
||||
switch( InputEvent.usParam )
|
||||
{
|
||||
#ifdef JA2TESTVERSION
|
||||
case ESC:
|
||||
//if (!is_networked)
|
||||
KillTacticalPlacementGUI();
|
||||
break;
|
||||
#endif
|
||||
case ENTER:
|
||||
if( ButtonList[ iTPButtons[ DONE_BUTTON ] ]->uiFlags & BUTTON_ENABLED )
|
||||
{
|
||||
if(!is_client)KillTacticalPlacementGUI();
|
||||
if(is_client)send_donegui(0);
|
||||
}
|
||||
break;
|
||||
case 'c':
|
||||
if(islocked!=1)ClearPlacementsCallback( ButtonList[ iTPButtons[ CLEAR_BUTTON ] ], MSYS_CALLBACK_REASON_LBUTTON_UP );
|
||||
break;
|
||||
case 'g':
|
||||
if(islocked!=1)GroupPlacementsCallback( ButtonList[ iTPButtons[ GROUP_BUTTON ] ], MSYS_CALLBACK_REASON_LBUTTON_UP );
|
||||
break;
|
||||
case 's':
|
||||
if(islocked!=1)SpreadPlacementsCallback( ButtonList[ iTPButtons[ SPREAD_BUTTON ] ], MSYS_CALLBACK_REASON_LBUTTON_UP );
|
||||
break;
|
||||
case 'x':
|
||||
if( InputEvent.usKeyState & ALT_DOWN )
|
||||
{
|
||||
HandleShortCutExitState();
|
||||
}
|
||||
break;
|
||||
#ifdef JA2TESTVERSION
|
||||
case ESC:
|
||||
//if (!is_networked)
|
||||
KillTacticalPlacementGUI();
|
||||
break;
|
||||
#endif
|
||||
case ENTER:
|
||||
if( ButtonList[ iTPButtons[ DONE_BUTTON ] ]->uiFlags & BUTTON_ENABLED )
|
||||
{
|
||||
if(!is_client)KillTacticalPlacementGUI();
|
||||
if(is_client)send_donegui(0);
|
||||
}
|
||||
break;
|
||||
case 'c':
|
||||
if(islocked!=1)ClearPlacementsCallback( ButtonList[ iTPButtons[ CLEAR_BUTTON ] ], MSYS_CALLBACK_REASON_LBUTTON_UP );
|
||||
break;
|
||||
case 'g':
|
||||
if(islocked!=1)GroupPlacementsCallback( ButtonList[ iTPButtons[ GROUP_BUTTON ] ], MSYS_CALLBACK_REASON_LBUTTON_UP );
|
||||
break;
|
||||
case 's':
|
||||
if(islocked!=1)SpreadPlacementsCallback( ButtonList[ iTPButtons[ SPREAD_BUTTON ] ], MSYS_CALLBACK_REASON_LBUTTON_UP );
|
||||
break;
|
||||
case 'x':
|
||||
if( InputEvent.usKeyState & ALT_DOWN )
|
||||
{
|
||||
HandleShortCutExitState();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1134,14 +1178,24 @@ void TacticalPlacementHandle()
|
||||
}
|
||||
|
||||
// WANNE - MP: Center
|
||||
if (is_networked && gfCenter)
|
||||
if ( gfCenter && ( is_networked || (gGameExternalOptions.ubSkyriderHotLZ == 3 && gMercPlacement[ gbSelectedMercID ].pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP)) )
|
||||
{
|
||||
if (gMercPlacement[ gbCursorMercID ].ubStrategicInsertionCode == INSERTION_CODE_CENTER )
|
||||
if ( gMercPlacement[ gbCursorMercID ].ubStrategicInsertionCode == INSERTION_CODE_CENTER )
|
||||
{
|
||||
if (gusMouseYPos >= (iOffsetVertical + 130) && // N
|
||||
gusMouseYPos <= (iOffsetVertical + 320 - 130) && // S
|
||||
gusMouseXPos >= (iOffsetHorizontal + 250) && // W
|
||||
gusMouseXPos <= (iOffsetHorizontal + 634 - 250)) // E
|
||||
if (gusMouseYPos >= (iOffsetVertical + CENTERENTRYPTS_TOP_Y) && // N
|
||||
gusMouseYPos <= (iOffsetVertical + CENTERENTRYPTS_BOTTOM_Y) && // S
|
||||
gusMouseXPos >= (iOffsetHorizontal + CENTERENTRYPTS_LEFT_X) && // W
|
||||
gusMouseXPos <= (iOffsetHorizontal + CENTERENTRYPTS_RIGHT_X)) // E
|
||||
{
|
||||
gfValidCursor = TRUE;
|
||||
}
|
||||
}
|
||||
else if ( gMercPlacement[ gbCursorMercID ].ubStrategicInsertionCode == INSERTION_CODE_CHOPPER )
|
||||
{
|
||||
if (gusMouseYPos >= (iOffsetVertical + AIRDROPENTRYPTS_TOP_Y) && // N
|
||||
gusMouseYPos <= (iOffsetVertical + AIRDROPENTRYPTS_BOTTOM_Y) && // S
|
||||
gusMouseXPos >= (iOffsetHorizontal + AIRDROPENTRYPTS_LEFT_X) && // W
|
||||
gusMouseXPos <= (iOffsetHorizontal + AIRDROPENTRYPTS_RIGHT_X)) // E
|
||||
{
|
||||
gfValidCursor = TRUE;
|
||||
}
|
||||
@@ -1285,21 +1339,21 @@ void PlaceMercs()
|
||||
INT32 i;
|
||||
switch( gubDefaultButton )
|
||||
{
|
||||
case SPREAD_BUTTON: //Place mercs randomly along their side using map edgepoints.
|
||||
ChooseRandomEdgepoints();
|
||||
break;
|
||||
case CLEAR_BUTTON:
|
||||
for( i = 0; i < giPlacements; i++ )
|
||||
{
|
||||
PickUpMercPiece( i );
|
||||
}
|
||||
gubSelectedGroupID = 0;
|
||||
gbSelectedMercID = 0;
|
||||
SetCursorMerc( 0 );
|
||||
gfEveryonePlaced = FALSE;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
case SPREAD_BUTTON: //Place mercs randomly along their side using map edgepoints.
|
||||
ChooseRandomEdgepoints();
|
||||
break;
|
||||
case CLEAR_BUTTON:
|
||||
for( i = 0; i < giPlacements; i++ )
|
||||
{
|
||||
PickUpMercPiece( i );
|
||||
}
|
||||
gubSelectedGroupID = 0;
|
||||
gbSelectedMercID = 0;
|
||||
SetCursorMerc( 0 );
|
||||
gfEveryonePlaced = FALSE;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
gfTacticalPlacementGUIDirty = TRUE;
|
||||
}
|
||||
@@ -1386,24 +1440,27 @@ void MercClickCallback( MOUSE_REGION *reg, INT32 reason )
|
||||
{
|
||||
if(islocked != 1)//hayden
|
||||
{
|
||||
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
||||
{
|
||||
INT8 i;
|
||||
for( i = 0; i < giPlacements; i++ )
|
||||
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
||||
{
|
||||
if( &gMercPlacement[ i ].region == reg )
|
||||
INT8 i;
|
||||
for( i = 0; i < giPlacements; i++ )
|
||||
{
|
||||
if( gbSelectedMercID != i )
|
||||
if( &gMercPlacement[ i ].region == reg )
|
||||
{
|
||||
gbSelectedMercID = i;
|
||||
gpTacticalPlacementSelectedSoldier = gMercPlacement[ i ].pSoldier;
|
||||
if( gubDefaultButton == GROUP_BUTTON )
|
||||
if( gbSelectedMercID != i )
|
||||
{
|
||||
gubSelectedGroupID = gpTacticalPlacementSelectedSoldier->ubGroupID;
|
||||
if ( gGameExternalOptions.ubSkyriderHotLZ == 3 && gMercPlacement[ i ].pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
gubDefaultButton = GROUP_BUTTON;
|
||||
|
||||
gbSelectedMercID = i;
|
||||
gpTacticalPlacementSelectedSoldier = gMercPlacement[ i ].pSoldier;
|
||||
if( gubDefaultButton == GROUP_BUTTON )
|
||||
{
|
||||
gubSelectedGroupID = gpTacticalPlacementSelectedSoldier->ubGroupID;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1414,6 +1471,10 @@ void SelectNextUnplacedUnit()
|
||||
INT32 i;
|
||||
if( gbSelectedMercID == -1 )
|
||||
return;
|
||||
|
||||
if ( gGameExternalOptions.ubSkyriderHotLZ == 3 && gMercPlacement[ gbSelectedMercID ].pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
gubDefaultButton = GROUP_BUTTON;
|
||||
|
||||
for( i = gbSelectedMercID; i < giPlacements; i++ )
|
||||
{ //go from the currently selected soldier to the end
|
||||
if( !gMercPlacement[ i ].fPlaced )
|
||||
@@ -1465,6 +1526,9 @@ void HandleTacticalPlacementClicksInOverheadMap( MOUSE_REGION *reg, INT32 reason
|
||||
{
|
||||
if( gbSelectedMercID != -1 )
|
||||
{
|
||||
if ( gGameExternalOptions.ubSkyriderHotLZ == 3 && gMercPlacement[ gbSelectedMercID ].pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
gubDefaultButton = GROUP_BUTTON;
|
||||
|
||||
if( GetOverheadMouseGridNo( &sGridNo ) )
|
||||
{ //we have clicked within a valid part of the map.
|
||||
BeginMapEdgepointSearch();
|
||||
@@ -1595,6 +1659,9 @@ void PutDownMercPiece( INT32 iPlacement )
|
||||
case INSERTION_CODE_GRIDNO:
|
||||
pSoldier->sInsertionGridNo = pSoldier->usStrategicInsertionData;
|
||||
break;
|
||||
case INSERTION_CODE_CHOPPER:
|
||||
pSoldier->sInsertionGridNo = pSoldier->usStrategicInsertionData;
|
||||
break;
|
||||
default:
|
||||
Assert( 0 );
|
||||
break;
|
||||
@@ -1605,6 +1672,21 @@ void PutDownMercPiece( INT32 iPlacement )
|
||||
|
||||
if(!TileIsOutOfBounds(sGridNo))
|
||||
{
|
||||
// Flugente: initiate airdrop, place merc on roof if necessary
|
||||
if ( gGameExternalOptions.ubSkyriderHotLZ == 3 && pSoldier->bSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
{
|
||||
// hideous hack
|
||||
gfTacticalDoHeliRun = TRUE;
|
||||
SetHelicopterDroppoint(sGridNo);
|
||||
|
||||
pSoldier->usStrategicInsertionData = sGridNo;
|
||||
|
||||
if ( FindStructure( sGridNo, STRUCTURE_NORMAL_ROOF ) != NULL && NewOKDestination( pSoldier, sGridNo, false, 1 ) )
|
||||
{
|
||||
pSoldier->SetSoldierHeight( (FLOAT)58 );
|
||||
}
|
||||
}
|
||||
|
||||
ConvertGridNoToCellXY( sGridNo, &sCellX, &sCellY );
|
||||
|
||||
FLOAT scX = (FLOAT)sCellX;
|
||||
@@ -1618,7 +1700,6 @@ void PutDownMercPiece( INT32 iPlacement )
|
||||
pSoldier->EVENT_SetSoldierPosition( (FLOAT)sCellX, (FLOAT)sCellY );
|
||||
}
|
||||
|
||||
|
||||
pSoldier->EVENT_SetSoldierDirection( ubDirection );
|
||||
pSoldier->ubInsertionDirection = pSoldier->ubDirection;
|
||||
gMercPlacement[ iPlacement ].fPlaced = TRUE;
|
||||
|
||||
+1
-6
@@ -636,12 +636,7 @@ UINT32 MainGameScreenHandle(void)
|
||||
InternalLocateGridNo( gGameExternalOptions.iInitialMercArrivalLocation, TRUE );
|
||||
#endif
|
||||
// Start heli Run...
|
||||
#ifdef JA2UB
|
||||
StartHelicopterRun( gGameUBOptions.LOCATEGRIDNO ); //gMapInformation.sNorthGridNo );
|
||||
#else
|
||||
//StartHelicopterRun( gMapInformation.sNorthGridNo );
|
||||
StartHelicopterRun( gGameExternalOptions.iInitialMercArrivalLocation );
|
||||
#endif
|
||||
StartHelicopterRun();
|
||||
|
||||
// Update clock by one so that our DidGameJustStatrt() returns now false for things like LAPTOP, etc...
|
||||
SetGameTimeCompressionLevel( TIME_COMPRESS_X1 );
|
||||
|
||||
Reference in New Issue
Block a user