mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
MERGED source code from development trunk revision 4545 up to latest current revision 4882
Development Trunk: https://ja2svn.dyndns.org/source/ja2/branches/Wanne/JA2%201.13%20MP A detailed list of all the features (changes) is visible in the history log of the development trunk: INFO: The source code for the official 2011 release (4870) has been branched here: https://ja2svn.dyndns.org/source/ja2/branches/JA2_rev.4870_2011 This commit contains the following features: *** Externalized Vehicles *** o Now with this feature we can add/remove vehicles o New XML File: TableData\Vehicles.xml o Added a new function parameter to lua file Scripts\Overhead lua to set up the helicopter in method: SetUpHelicopterForPlayer() o Added example mini (Docs\Externalized Vehicles Example.zip) mod which adds 2 additional vehicles (hummer and ice-cream truck to sector A9) *** Up to 255 save slots *** - There is a "Next" and "Prev" button where you can scroll through the save slots - It is now possible to load the automatic save (SAVE_EVERY_N_HOURS) from the load screen. This is the first slot after the quickload slot - Added the 2 alternate players end turn saves (which can be enabled/disabled in option screen) to the save/load game form *** New Feature: Externalized emails from Emails.edt to XML*** o This feature can be enabled/disabled in the Source: --> See email.cpp: If "ReadXMLEmail" == FALSE, then normal way (read from Email.edt) otherwise read from XML files o 2 new XML files: TableData\Email\EmailMercAvailable.xml and EmailMercLevelUp.xml o Renamed SenderNamesList.xml to EmailSenderNamesList.xml and moved from TableData folder to TableData\Email folder o Names for mercenaries are get from the file MercProfiles.xml and different names get from the file EmailSenderNamesList.xml *** Externalized Hidden Towns (Tixa, Orta) *** o Now it is possible to add new hidden towns (locations) o See file: TableData/Map/Cities.xml o New variable in TableData/Map/Cities.xml - hiddenTown: 0 = show on strategy map, 1 = Hide on strategy map - townIcon: 1 = on, 0 = off (This is the icon you see on the strategy map) - szIconFile: The path to the sti icon file (eg: interface\prison.sti, interface\my_icon.sti) - iconPosition: The x,y position of the icon on the strategy map *** Encyclopedia and Briefing Room, reachable from the laptop *** o 2 new ja2_options.ini properties: BRIEFING_ROOM, ENCYCLOPEDIA o demonstration video: http://www.youtube.com/watch?v=7CIXdXWLrAo o Added Example usage of the Briefing Room - Extract it in your JA2 1.13 folder and use the latest development executable - The briefing room can be reached from the laptop. Enter SN5631 for the code and then click the "Exit" button - See "Info_BriefingRoom.txt" and "BriefingRoom_Mission1.png" *** Improved interrupt system (IIS) *** o This system changes the way interrupts work. See: http://www.ja-galaxy-forum.com/board/ubbthreads.php?ubb=showflat&Number=290787#Post290787 o Option system (see ja2_options.ini: IMPROVED_INTERRUPT_SYSTEM) o A few more settings for the interrupt system in ja2_options.ini o INFO: Multiplayer games always use the "old" interrupt system, not matter what the user selects in the ja2_options.ini *** Walking and sidestepping with weapon raised *** o Enable/disable the walking/sidestepping with raised weapon in ja2_options.ini: ALLOW_WALKING_WITH_WEAPON_RAISED o You can set an AP/BP modifier when walking/sidestepping with weapon raised in APBPConstants.ini: AP_MODIFIER_WEAPON_READY o The following feature apply when you walk/sidestep with weapon raised: -> limited angle of view, but you can see more farther when the weapon has a scope -> better change for interrupts if you see an enemy -> less APs and BPs when shooting, because the weapon is already raised -> It should cost more APs when walking. Maybe you can export the additional AP and BP modifier to the APBPConstants.ini *** Increase squad size to 8 (800x600) and 8 and 10 (1024x768) *** o Squad sizes (dependend on the screen resolution) can be selected in the start new game screen o In a multiplayer game, the squad size will always be 6, because it does not work with more soldiers/squad *** Added UB-1.13 source code *** o Merged the UB-1.13 source code (Revision: 4721) from svn: http://subversion.assembla.com/svn/ub-source113 o If you want to build UB-EXE or UB-MapEditor, just enable the 2 defines (JA2UB and JA2UBMAPS) in "builddefines.h" o The UB-Verion reads from "ja2_UB.ini" instead of "ja2.ini" o There are 2 new XML files - Layout\LayoutMainMenu.xml - MapAction\ActionItems.xml o There are 2 new LUA-Script files - Scripts\ExplosionControl.lua - Scripts\InterfaceDialogue.lua *** Hide enemy health text / enemy hit count *** o ja2_options.ini: HIDE_ENEMY_HEALTH_TEXT, HIDE_ENEMY_HIT_COUNT o both new settings only have effect in a singleplayer game o see: http://www.ja-galaxy-forum.com/board/ubbthreads.php?ubb=showflat&Number=128840&page=1 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@4885 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+126
-9
@@ -36,6 +36,15 @@
|
||||
#include "BobbyRMailOrder.h"
|
||||
#include "connect.h"
|
||||
|
||||
#ifdef JA2UB
|
||||
#include "email.h"
|
||||
#include "Strategic Merc Handler.h"
|
||||
#include "laptop.h"
|
||||
#include "Ja25 Strategic Ai.h"
|
||||
#include "ub_config.h"
|
||||
#endif
|
||||
|
||||
#include "LuaInitNPCs.h"
|
||||
|
||||
#define TESTQUESTS
|
||||
|
||||
@@ -655,14 +664,23 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Quests");
|
||||
|
||||
BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
{
|
||||
|
||||
|
||||
// LuaCheckFact ( usFact, ubProfileID, 0 );
|
||||
|
||||
//#if 0
|
||||
INT8 bTown = -1;
|
||||
|
||||
|
||||
switch( usFact )
|
||||
{
|
||||
#ifdef JA2UB
|
||||
//Ja25 No dimitri
|
||||
#else
|
||||
case FACT_DIMITRI_DEAD:
|
||||
gubFact[ usFact ] = (gMercProfiles[ DIMITRI ].bMercStatus == MERC_IS_DEAD );
|
||||
break;
|
||||
#endif
|
||||
case FACT_CURRENT_SECTOR_IS_SAFE:
|
||||
gubFact[FACT_CURRENT_SECTOR_IS_SAFE] = !( ( (gTacticalStatus.fEnemyInSector && NPCHeardShot( ubProfileID ) ) || gTacticalStatus.uiFlags & INCOMBAT ) );
|
||||
break;
|
||||
@@ -705,6 +723,9 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
case FACT_NPC_WOUNDED_BY_PLAYER:
|
||||
gubFact[FACT_NPC_WOUNDED_BY_PLAYER] = CheckNPCWounded( ubProfileID, TRUE );
|
||||
break;
|
||||
#ifdef JA2UB
|
||||
// no ja25 UB
|
||||
#else
|
||||
case FACT_IRA_NOT_PRESENT:
|
||||
gubFact[FACT_IRA_NOT_PRESENT] = !CheckNPCWithin( ubProfileID, IRA, 10 );
|
||||
break;
|
||||
@@ -721,6 +742,7 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
gubFact[FACT_IRA_UNHIRED_AND_ALIVE] = FALSE;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case FACT_NPC_BLEEDING:
|
||||
gubFact[FACT_NPC_BLEEDING] = CheckNPCBleeding( ubProfileID );
|
||||
break;
|
||||
@@ -734,7 +756,9 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
gubFact[FACT_NPC_BLEEDING_BUT_OKAY] = FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef JA2UB
|
||||
//Ja25: NO Carmen
|
||||
#else
|
||||
case FACT_PLAYER_HAS_HEAD_AND_CARMEN_IN_SAN_MONA:
|
||||
gubFact[usFact] = (CheckNPCSector( CARMEN, 5, MAP_ROW_C, 0 ) && CheckPlayerHasHead() );
|
||||
break;
|
||||
@@ -746,7 +770,7 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
case FACT_PLAYER_HAS_HEAD_AND_CARMEN_IN_DRASSEN:
|
||||
gubFact[usFact] = (CheckNPCSector( CARMEN, 13, MAP_ROW_C, 0 ) && CheckPlayerHasHead() );
|
||||
break;
|
||||
|
||||
#endif
|
||||
case FACT_NPC_OWED_MONEY:
|
||||
gubFact[FACT_NPC_OWED_MONEY] = (gMercProfiles[ubProfileID].iBalance < 0);
|
||||
break;
|
||||
@@ -783,7 +807,7 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
break;
|
||||
/*
|
||||
case FACT_SKYRIDER_CLOSE_TO_CHOPPER:
|
||||
SetUpHelicopterForPlayer( 13, MAP_ROW_B , SKYRIDER );
|
||||
SetUpHelicopterForPlayer( 13, MAP_ROW_B, gNewVehicle[ HELICOPTER ].NewPilot, HELICOPTER );
|
||||
break;
|
||||
*/
|
||||
case FACT_SPIKE_AT_DOOR:
|
||||
@@ -870,9 +894,13 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
case FACT_SHANK_NOT_IN_SECTOR:
|
||||
gubFact[usFact] = ( FindSoldierByProfileID( SHANK, FALSE ) == NULL );
|
||||
break;
|
||||
#ifdef JA2UB
|
||||
//Ja25 No queen
|
||||
#else
|
||||
case FACT_QUEEN_DEAD:
|
||||
gubFact[usFact] = (gMercProfiles[ QUEEN ].bMercStatus == MERC_IS_DEAD);
|
||||
break;
|
||||
#endif
|
||||
case FACT_MINE_EMPTY:
|
||||
gubFact[usFact] = IsHisMineEmpty( ubProfileID );
|
||||
break;
|
||||
@@ -1011,21 +1039,33 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
break;
|
||||
|
||||
case FACT_PLAYER_OWNS_2_TOWNS_INCLUDING_OMERTA:
|
||||
#ifdef JA2UB
|
||||
//UB
|
||||
#else
|
||||
gubFact[usFact] = ( ( GetNumberOfWholeTownsUnderControl() == gGameExternalOptions.ubEarlyRebelsRecruitment[1] || gGameExternalOptions.ubEarlyRebelsRecruitment[0] == 1
|
||||
|| ( gubQuest[QUEST_FOOD_ROUTE] == QUESTDONE && gGameExternalOptions.ubEarlyRebelsRecruitment[0] == 4 ) ) && IsTownUnderCompleteControlByPlayer( OMERTA ) );
|
||||
#endif
|
||||
break;
|
||||
|
||||
case FACT_PLAYER_OWNS_3_TOWNS_INCLUDING_OMERTA:
|
||||
#ifdef JA2UB
|
||||
//UB
|
||||
#else
|
||||
gubFact[usFact] = ( ( GetNumberOfWholeTownsUnderControl() == gGameExternalOptions.ubEarlyRebelsRecruitment[2] || gGameExternalOptions.ubEarlyRebelsRecruitment[0] == 1
|
||||
|| ( gubQuest[QUEST_FOOD_ROUTE] == QUESTDONE && gGameExternalOptions.ubEarlyRebelsRecruitment[0] == 4 ) ) && IsTownUnderCompleteControlByPlayer( OMERTA ) );
|
||||
#endif
|
||||
break;
|
||||
|
||||
case FACT_PLAYER_OWNS_4_TOWNS_INCLUDING_OMERTA:
|
||||
#ifdef JA2UB
|
||||
//UB
|
||||
#else
|
||||
gubFact[usFact] = ( ( GetNumberOfWholeTownsUnderControl() >= gGameExternalOptions.ubEarlyRebelsRecruitment[3] || gGameExternalOptions.ubEarlyRebelsRecruitment[0] == 1
|
||||
|| ( gubQuest[QUEST_FOOD_ROUTE] == QUESTDONE && gGameExternalOptions.ubEarlyRebelsRecruitment[0] == 4 ) ) && IsTownUnderCompleteControlByPlayer( OMERTA ) );
|
||||
// silversurfer: this is the highest requirement and therefore we will automatically enable recruitment of Miguel
|
||||
if ( gubFact[usFact] )
|
||||
SetFactTrue(40); // Miguel will now be willing to join and so will the other RPC
|
||||
#endif
|
||||
break;
|
||||
|
||||
case FACT_PLAYER_FOUGHT_THREE_TIMES_TODAY:
|
||||
@@ -1132,11 +1172,13 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
case FACT_WALDO_ALIVE:
|
||||
gubFact[usFact] = gMercProfiles[ WALDO ].bMercStatus != MERC_IS_DEAD;
|
||||
break;
|
||||
|
||||
#ifdef JA2UB
|
||||
//UB
|
||||
#else
|
||||
case FACT_PERKO_ALIVE:
|
||||
gubFact[usFact] = gMercProfiles[ PERKO ].bMercStatus != MERC_IS_DEAD;
|
||||
break;
|
||||
|
||||
#endif
|
||||
case FACT_TONY_ALIVE:
|
||||
gubFact[usFact] = gMercProfiles[ TONY ].bMercStatus != MERC_IS_DEAD;
|
||||
break;
|
||||
@@ -1262,6 +1304,8 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//#endif
|
||||
return( gubFact[usFact] );
|
||||
}
|
||||
|
||||
@@ -1346,9 +1390,13 @@ void InternalEndQuest( UINT8 ubQuest, INT16 sSectorX, INT16 sSectorY, BOOLEAN fU
|
||||
else
|
||||
GiveQuestRewardPoint( sSectorX, sSectorY, 9, NO_PROFILE );
|
||||
break;
|
||||
#ifdef JA2UB
|
||||
//off
|
||||
#else
|
||||
case QUEST_KILL_DEIDRANNA :
|
||||
GiveQuestRewardPoint( sSectorX, sSectorY, 25, NO_PROFILE );
|
||||
break;
|
||||
#endif
|
||||
default :
|
||||
GiveQuestRewardPoint( sSectorX, sSectorY, 4, NO_PROFILE );
|
||||
break;
|
||||
@@ -1376,6 +1424,58 @@ void InternalEndQuest( UINT8 ubQuest, INT16 sSectorX, INT16 sSectorY, BOOLEAN fU
|
||||
gMercProfiles[ MADAME ].bNPCData = 0;
|
||||
gMercProfiles[ MADAME ].bNPCData2 = 0;
|
||||
}
|
||||
|
||||
#ifdef JA2UB
|
||||
//if the quest is the FIX LAPTOP quest
|
||||
if( ubQuest == QUEST_FIX_LAPTOP && gGameUBOptions.LaptopQuestEnabled == TRUE )
|
||||
{
|
||||
//Set the fact that AIM and MERC should start selling
|
||||
gJa25SaveStruct.fHaveAimandMercOffferItems = TRUE;
|
||||
|
||||
//Remeber that we should send email in the next sector
|
||||
gJa25SaveStruct.fSendEmail_10_NextSector = TRUE;
|
||||
|
||||
AddEmail( EMAIL_PILOTMISSING, EMAIL_PILOTMISSING_LENGTH, MAIL_ENRICO, GetWorldTotalMin() ,-1,-1, TYPE_EMAIL_EMAIL_EDT);
|
||||
AddEmail( EMAIL_MAKECONTACT, EMAIL_MAKECONTACT_LENGTH, MAIL_ENRICO, GetWorldTotalMin() ,-1,-1, TYPE_EMAIL_EMAIL_EDT);
|
||||
|
||||
//Merc and Aim emails
|
||||
AddEmail( EMAIL_AIM_PROMOTION_1, EMAIL_AIM_PROMOTION_1_LENGTH, AIM_SITE, GetWorldTotalMin(),-1 ,-1, TYPE_EMAIL_EMAIL_EDT);
|
||||
AddEmail( EMAIL_MERC_PROMOTION_1, EMAIL_MERC_PROMOTION_1_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin(),-1,-1, TYPE_EMAIL_EMAIL_EDT);
|
||||
AddEmail( EMAIL_AIM_PROMOTION_2, EMAIL_AIM_PROMOTION_2_LENGTH, AIM_SITE, GetWorldTotalMin(),-1 ,-1, TYPE_EMAIL_EMAIL_EDT);
|
||||
|
||||
//Manuel
|
||||
{
|
||||
SOLDIERTYPE *pSoldier=NULL;
|
||||
|
||||
pSoldier = FindSoldierByProfileID( 60 , TRUE ); //MANUEL
|
||||
|
||||
if( pSoldier != NULL )
|
||||
{
|
||||
//Add the Manuel email
|
||||
AddEmail( EMAIL_MANUEL, EMAIL_MANUEL_LENGTH, MAIL_ENRICO, GetWorldTotalMin() ,-1, -1, TYPE_EMAIL_EMAIL_EDT);
|
||||
}
|
||||
}
|
||||
|
||||
//Miguel
|
||||
{
|
||||
//if miguel was dead, when importing the save
|
||||
if( gubFact[ FACT_PLAYER_IMPORTED_SAVE_MIGUEL_DEAD ] == FALSE )
|
||||
{
|
||||
//Add the miguel email
|
||||
AddEmail( EMAIL_MIGUELHELLO, EMAIL_MIGUELHELLO_LENGTH, MAIL_MIGUEL, GetWorldTotalMin(),-1, -1, TYPE_EMAIL_EMAIL_EDT);
|
||||
}
|
||||
}
|
||||
|
||||
//If any aim mercs were asked to send emails when the get back from duty elsewhere
|
||||
HandleAddingAnyAimAwayEmailsWhenLaptopGoesOnline();
|
||||
|
||||
//Should we send the IMP reminder email when we go back online
|
||||
ShouldImpReminderEmailBeSentWhenLaptopBackOnline();
|
||||
|
||||
//Force which ever of these emails that needed to be sent, to be sent
|
||||
HandleEmailBeingSentWhenEnteringSector( 0, 0, 0, TRUE );
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
void InitQuestEngine()
|
||||
@@ -1411,6 +1511,21 @@ void CheckForQuests( UINT32 uiDay )
|
||||
ScreenMsg( MSG_FONT_RED, MSG_DEBUG, L"Checking For Quests, Day %d", uiDay );
|
||||
#endif
|
||||
|
||||
#ifdef JA2UB
|
||||
// -------------------------------------------------------------------------------
|
||||
// QUEST 23 : Detroy missles
|
||||
// -------------------------------------------------------------------------------
|
||||
// The game always starts with destrouy missles quest, so turn it on if it hasn't
|
||||
// already started
|
||||
if( gubQuest[ QUEST_DESTROY_MISSLES ] == QUESTNOTSTARTED )
|
||||
{
|
||||
StartQuest( QUEST_DESTROY_MISSLES, -1, -1 );
|
||||
#ifdef TESTQUESTS
|
||||
ScreenMsg( MSG_FONT_RED, MSG_DEBUG, L"Started DESTORY MISSLES quest");
|
||||
#endif
|
||||
}
|
||||
//Ja25: No deliver letter quest, dont start it
|
||||
#else
|
||||
// -------------------------------------------------------------------------------
|
||||
// QUEST 0 : DELIVER LETTER
|
||||
// -------------------------------------------------------------------------------
|
||||
@@ -1425,7 +1540,7 @@ void CheckForQuests( UINT32 uiDay )
|
||||
ScreenMsg( MSG_FONT_RED, MSG_DEBUG, L"Started DELIVER LETTER quest");
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
// This quest gets turned OFF through conversation with Miguel - when user hands
|
||||
// Miguel the letter
|
||||
}
|
||||
@@ -1454,13 +1569,15 @@ BOOLEAN SaveQuestInfoToSavedGameFile( HWFILE hFile )
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN LoadQuestInfoFromSavedGameFile( HWFILE hFile )
|
||||
BOOLEAN LoadQuestInfoFromSavedGameFile( HWFILE hFile, UINT8 MaxQuest )
|
||||
{
|
||||
UINT32 uiNumBytesRead;
|
||||
|
||||
//Save all the states if the Quests
|
||||
FileRead( hFile, gubQuest, MAX_QUESTS, &uiNumBytesRead );
|
||||
if( uiNumBytesRead != MAX_QUESTS )
|
||||
//FileRead( hFile, gubQuest, MAX_QUESTS, &uiNumBytesRead );
|
||||
//if( uiNumBytesRead != MAX_QUESTS )
|
||||
FileRead( hFile, gubQuest, MaxQuest, &uiNumBytesRead );
|
||||
if( uiNumBytesRead != MaxQuest )
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user