mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
- Encyclopedia / Briefing Room Updates (by Jazz)
o Improved record o Restart game of Briefing Rooms o New Action for NPC (recruiting / unrecruiting) NPC_ACTION_RECRUIT_PROFILE_TO_EPC = 700 NPC_ACTION_UNRECRUIT_EPC = 701 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6120 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -81,6 +81,7 @@
|
||||
#include "Civ Quotes.h"
|
||||
#include "LuaInitNPCs.h"
|
||||
#include "Encyclopedia.h"
|
||||
#include "Encyclopedia_Data.h"
|
||||
#include "AimArchives.h"
|
||||
|
||||
extern INT16 APBPConstants[TOTAL_APBP_VALUES] = {0};
|
||||
@@ -1262,6 +1263,12 @@ if ( ReadXMLEmail == TRUE )
|
||||
}
|
||||
#endif
|
||||
|
||||
BackupBRandEncyclopedia ( gEncyclopediaLocationData, gEncyclopediaLocationDataBackup , 0);
|
||||
BackupBRandEncyclopedia ( gEncyclopediaProfilesData, gEncyclopediaProfilesDataBackup, 1);
|
||||
BackupBRandEncyclopedia ( gEncyclopediaInventoryDatag, EncyclopediaInventoryDataBackup , 2);
|
||||
BackupBRandEncyclopedia ( gEncyclopediaQuestsData, gEncyclopediaQuestsDataBackup, 3);
|
||||
|
||||
|
||||
#endif //ENABLE_ENCYCLOPEDIA
|
||||
|
||||
#ifdef ENABLE_BRIEFINGROOM
|
||||
@@ -1279,6 +1286,8 @@ if ( ReadXMLEmail == TRUE )
|
||||
}
|
||||
#endif
|
||||
|
||||
BackupBRandEncyclopedia ( gBriefingRoomData, gBriefingRoomDataBackup, 0);
|
||||
|
||||
#endif //ENABLE_BRIEFINGROOM
|
||||
|
||||
UINT8 p;
|
||||
|
||||
@@ -77,6 +77,13 @@ ENCYCLOPEDIA_LOCATION gEncyclopediaProfilesData[ NUM_PROFILES ];
|
||||
ENCYCLOPEDIA_LOCATION gEncyclopediaInventoryData[ MAXITEMS ];
|
||||
ENCYCLOPEDIA_LOCATION gEncyclopediaOldProfilesData[ NUM_PROFILES ];
|
||||
ENCYCLOPEDIA_LOCATION gEncyclopediaQuestsData[ MAX_QUESTS ];
|
||||
|
||||
ENCYCLOPEDIA_LOCATION gEncyclopediaLocationDataBackup[ NUM_SECTOR ];
|
||||
ENCYCLOPEDIA_LOCATION gEncyclopediaProfilesDataBackup[ NUM_PROFILES ];
|
||||
ENCYCLOPEDIA_LOCATION gEncyclopediaInventoryDataBackup[ MAXITEMS ];
|
||||
ENCYCLOPEDIA_LOCATION gEncyclopediaOldProfilesDataBackup[ NUM_PROFILES ];
|
||||
ENCYCLOPEDIA_LOCATION gEncyclopediaQuestsDataBackup[ MAX_QUESTS ];
|
||||
|
||||
ENCYCLOPEDIA_PROF_SAVE saveEncyclopediaProfilesData[ NUM_PROFILES ];
|
||||
BOOLEAN saveEncyclopediaLocationData[ NUM_SECTOR ];
|
||||
BOOLEAN saveEncyclopediaInventoryData[ MAXITEMS ];
|
||||
@@ -89,6 +96,10 @@ ENCYCLOPEDIA_LOCATION gEncyclopediaProfilesData[ 1 ];
|
||||
#ifdef ENABLE_BRIEFINGROOM
|
||||
ENCYCLOPEDIA_LOCATION gBriefingRoomData[ NUM_SECTOR ];
|
||||
ENCYCLOPEDIA_LOCATION gBriefingRoomSpecialMissionData[ NUM_SECTOR ];
|
||||
|
||||
ENCYCLOPEDIA_LOCATION gBriefingRoomDataBackup[ NUM_SECTOR ];
|
||||
ENCYCLOPEDIA_LOCATION gBriefingRoomSpecialMissionDataBackup[ NUM_SECTOR ];
|
||||
|
||||
MISSION_SAVE saveBriefingRoomData[ NUM_SECTOR ];
|
||||
MISSION_SAVE saveBriefingRoomSpecialMissionData[ NUM_SECTOR ];
|
||||
MISSION_SAVE saveMissionData[ NUM_SECTOR ];
|
||||
|
||||
@@ -210,6 +210,12 @@ extern ENCYCLOPEDIA_LOCATION gEncyclopediaDataTemp[ NUM_MAX_TEMP ];
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_ENCYCLOPEDIA
|
||||
extern ENCYCLOPEDIA_LOCATION gEncyclopediaLocationDataBackup[ NUM_SECTOR ];
|
||||
extern ENCYCLOPEDIA_LOCATION gEncyclopediaProfilesDataBackup[ NUM_PROFILES ];
|
||||
extern ENCYCLOPEDIA_LOCATION gEncyclopediaInventoryDataBackup[ MAXITEMS ];
|
||||
extern ENCYCLOPEDIA_LOCATION gEncyclopediaOldProfilesDataBackup[ NUM_PROFILES ];
|
||||
extern ENCYCLOPEDIA_LOCATION gEncyclopediaQuestsDataBackup[ MAX_QUESTS ];
|
||||
|
||||
extern ENCYCLOPEDIA_LOCATION gEncyclopediaLocationData[ NUM_SECTOR ];
|
||||
extern ENCYCLOPEDIA_LOCATION gEncyclopediaProfilesData[ NUM_PROFILES ];
|
||||
extern ENCYCLOPEDIA_LOCATION gEncyclopediaInventoryData[ MAXITEMS ];
|
||||
@@ -227,6 +233,10 @@ extern ENCYCLOPEDIA_LOCATION gEncyclopediaProfilesData[];
|
||||
#ifdef ENABLE_BRIEFINGROOM
|
||||
extern ENCYCLOPEDIA_LOCATION gBriefingRoomData[ NUM_SECTOR ];
|
||||
extern ENCYCLOPEDIA_LOCATION gBriefingRoomSpecialMissionData[ NUM_SECTOR ];
|
||||
|
||||
extern ENCYCLOPEDIA_LOCATION gBriefingRoomDataBackup[ NUM_SECTOR ];
|
||||
extern ENCYCLOPEDIA_LOCATION gBriefingRoomSpecialMissionDataBackup[ NUM_SECTOR ];
|
||||
|
||||
extern MISSION_SAVE saveBriefingRoomData[ NUM_SECTOR ];
|
||||
extern MISSION_SAVE saveBriefingRoomSpecialMissionData[ NUM_SECTOR ];
|
||||
extern MISSION_SAVE saveMissionData[ NUM_SECTOR ];
|
||||
|
||||
@@ -121,6 +121,8 @@ void SelectSoundButtonsRegionCallBack(GUI_BUTTON * btn, INT32 reason );
|
||||
BOOLEAN LoadEncyclopediaFromLoadGameFile( HWFILE hFile );
|
||||
BOOLEAN SaveEncyclopediaToSaveGameFile( HWFILE hFile );
|
||||
|
||||
void BackupBRandEncyclopedia ( ENCYCLOPEDIA_LOCATION *EncyBackup, ENCYCLOPEDIA_LOCATION *Ency, UINT32 NUM);
|
||||
|
||||
BOOLEAN DisplayEncyclopediaLocationText()
|
||||
{
|
||||
return(TRUE);
|
||||
@@ -248,6 +250,81 @@ UINT32 i,NUM_TEMP;
|
||||
#endif // ENABLE_ENCYCLOPEDIA
|
||||
}
|
||||
|
||||
void BackupBRandEncyclopedia ( ENCYCLOPEDIA_LOCATION *EncyBackup, ENCYCLOPEDIA_LOCATION *Ency, UINT32 NUM)
|
||||
{
|
||||
//#ifdef ENABLE_ENCYCLOPEDIA
|
||||
#if (defined ENABLE_ENCYCLOPEDIA || defined ENABLE_BRIEFINGROOM)
|
||||
|
||||
UINT32 i,NUM_TEMP;
|
||||
|
||||
if ( NUM == 0 )
|
||||
NUM_TEMP = NUM_SECTOR;
|
||||
else if ( NUM == 1 )
|
||||
NUM_TEMP = NUM_PROFILES;
|
||||
else if ( NUM == 2 )
|
||||
NUM_TEMP = MAXITEMS;
|
||||
else if ( NUM == 3 )
|
||||
NUM_TEMP = MAX_QUESTS;
|
||||
else if ( NUM == 4 || NUM == 5 )
|
||||
NUM_TEMP = NUM_SECTOR;
|
||||
else
|
||||
NUM_TEMP = NUM_SECTOR;
|
||||
|
||||
for(i=0; i<NUM_TEMP; i++)
|
||||
{
|
||||
Ency[i].uiIndex = EncyBackup[i].uiIndex;
|
||||
/*
|
||||
Ency[i].sImagePositionX[0] = EncyBackup[i].sImagePositionX[0];
|
||||
Ency[i].sImagePositionY[0] = EncyBackup[i].sImagePositionY[0];
|
||||
|
||||
Ency[i].sImagePositionX[1] = EncyBackup[i].sImagePositionX[1];
|
||||
Ency[i].sImagePositionY[1] = EncyBackup[i].sImagePositionY[1];
|
||||
|
||||
Ency[i].sImagePositionX[2] = EncyBackup[i].sImagePositionX[2];
|
||||
Ency[i].sImagePositionY[2] = EncyBackup[i].sImagePositionY[2];
|
||||
|
||||
Ency[i].sImagePositionX[3] = EncyBackup[i].sImagePositionX[3];
|
||||
Ency[i].sImagePositionY[3] = EncyBackup[i].sImagePositionY[3];
|
||||
*/
|
||||
Ency[i].Hidden = EncyBackup[i].Hidden;
|
||||
// Ency[i].SectorX = EncyBackup[i].SectorX;
|
||||
// Ency[i].SectorY = EncyBackup[i].SectorY;
|
||||
// Ency[i].SectorZ = EncyBackup[i].SectorZ;
|
||||
|
||||
// Ency[i].MaxPages = EncyBackup[i].MaxPages;
|
||||
// Ency[i].MaxImages = EncyBackup[i].MaxImages;
|
||||
|
||||
//Only locations
|
||||
// Ency[i].LocType = EncyBackup[i].LocType;
|
||||
|
||||
//Only profiles
|
||||
// Ency[i].IDProfile = EncyBackup[i].IDProfile;
|
||||
// Ency[i].Filtr = EncyBackup[i].Filtr;
|
||||
// Ency[i].enableDesc = EncyBackup[i].enableDesc;
|
||||
// Ency[i].subGroup1 = EncyBackup[i].subGroup1;
|
||||
Ency[i].bvisible = EncyBackup[i].bvisible;
|
||||
|
||||
//Inventory
|
||||
// Ency[i].InventoryClass = EncyBackup[i].InventoryClass;
|
||||
|
||||
//Quest
|
||||
Ency[i].QuestID = EncyBackup[i].QuestID;
|
||||
Ency[i].pQuests = EncyBackup[i].pQuests;
|
||||
/* Ency[i].SpecialQuestImage = EncyBackup[i].SpecialQuestImage;
|
||||
|
||||
Ency[i].ImagePositionQX[0] = EncyBackup[i].ImagePositionQX[0];
|
||||
Ency[i].ImagePositionQY[0] = EncyBackup[i].ImagePositionQY[0];
|
||||
Ency[i].ImagePositionQX[1] = EncyBackup[i].ImagePositionQX[1];
|
||||
Ency[i].ImagePositionQY[1] = EncyBackup[i].ImagePositionQY[1];
|
||||
*/
|
||||
Ency[i].MissionID = EncyBackup[i].MissionID;
|
||||
Ency[i].NextMission = EncyBackup[i].NextMission;
|
||||
|
||||
Ency[i].CheckMission = EncyBackup[i].CheckMission;
|
||||
}
|
||||
#endif // ENABLE_ENCYCLOPEDIA
|
||||
}
|
||||
|
||||
void CopyToTemp ( ENCYCLOPEDIA_LOCATION *Ency, BOOLEAN bFiltr, INT32 sort, INT32 TypFiltr, BOOLEAN ShowBox )
|
||||
{
|
||||
//#ifdef ENABLE_ENCYCLOPEDIA
|
||||
|
||||
@@ -17,6 +17,8 @@ extern BOOLEAN bEncyclopediaQuests;
|
||||
extern BOOLEAN bBriefingRoom;
|
||||
extern BOOLEAN bBriefingRoomSpecialMission;
|
||||
|
||||
extern void BackupBRandEncyclopedia ( ENCYCLOPEDIA_LOCATION *EncyBackup, ENCYCLOPEDIA_LOCATION *Ency, UINT32 NUM);
|
||||
|
||||
extern UINT32 IDPageEncyData;
|
||||
extern void InitData ( BOOLEAN bInit);
|
||||
extern void UnLoadMenuButtons ();
|
||||
|
||||
+12
-1
@@ -683,6 +683,17 @@ fFirstTimeInMapScreen = TRUE;
|
||||
gAimAvailability[i].ubAimArrayID = gAimAvailabilityTemp[i].ubAimArrayID;
|
||||
gAimAvailability[i].AimBio = gAimAvailabilityTemp[i].AimBio;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_ENCYCLOPEDIA
|
||||
BackupBRandEncyclopedia ( gEncyclopediaLocationDataBackup, gEncyclopediaLocationData, 0);
|
||||
BackupBRandEncyclopedia ( gEncyclopediaProfilesDataBackup, gEncyclopediaProfilesData, 1);
|
||||
BackupBRandEncyclopedia ( gEncyclopediaInventoryDataBackup, gEncyclopediaInventoryData, 2);
|
||||
BackupBRandEncyclopedia ( gEncyclopediaQuestsDataBackup, gEncyclopediaQuestsData, 3);
|
||||
#endif //ENABLE_ENCYCLOPEDIA
|
||||
|
||||
#ifdef ENABLE_BRIEFINGROOM
|
||||
BackupBRandEncyclopedia ( gBriefingRoomDataBackup, gBriefingRoomData, 0);
|
||||
#endif //ENABLE_BRIEFINGROOM
|
||||
|
||||
// IF our first time, go into laptop!
|
||||
if ( gubScreenCount == 0 )
|
||||
@@ -1239,4 +1250,4 @@ void ReStartingGame()
|
||||
else
|
||||
gubCheatLevel = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,6 +290,7 @@ static int l_CheckCharacterSectorZ (lua_State *L);
|
||||
static int l_CheckNPCSectorNew (lua_State *L);
|
||||
static int l_GetWorldHour (lua_State *L);
|
||||
static int l_FindItemSoldier (lua_State *L);
|
||||
static int l_FindItem2Soldier (lua_State *L);
|
||||
|
||||
static int l_CheckNPCWoundedbyPlayer (lua_State *L);
|
||||
static int l_CheckNPCWounded (lua_State *L);
|
||||
@@ -943,6 +944,7 @@ void IniFunction(lua_State *L)
|
||||
lua_register(L, "ClosestPC", l_ClosestPC );
|
||||
lua_register(L, "TileIsOutOfBounds", l_TileIsOutOfBounds );
|
||||
lua_register(L, "FindItemSoldier",l_FindItemSoldier);
|
||||
lua_register(L, "FindItemSoldierAddItemToPool",l_FindItemSoldier);
|
||||
lua_register(L, "TileIsOutOfBoundsClosestPC", l_TileIsOutOfBoundsClosestPC);
|
||||
lua_register(L, "CheckCharacterSectorZ", l_CheckCharacterSectorZ);
|
||||
lua_register(L, "CheckSoldierNeutral", l_bNeutral);
|
||||
@@ -952,6 +954,8 @@ void IniFunction(lua_State *L)
|
||||
lua_register(L, "IsMercDead", l_IsMercDead);
|
||||
lua_register(L, "IsMercHireable", l_IsMercHireable);
|
||||
|
||||
lua_register(L, "FindItemProfile",l_FindItem2Soldier);
|
||||
|
||||
//Set merc
|
||||
lua_register(L, "SetThreatenDefaultResponseUsedRecently", l_bThreatenDefaultResponseUsedRecently);
|
||||
lua_register(L, "SetRecruitDefaultResponseUsedRecently", l_bRecruitDefaultResponseUsedRecently);
|
||||
@@ -7780,6 +7784,42 @@ BOOLEAN LetLuaHandleNPCSystemEvent( UINT32 uiEvent, UINT8 Init)
|
||||
*/
|
||||
//---------------
|
||||
|
||||
static int l_FindItem2Soldier (lua_State *L)
|
||||
{
|
||||
UINT8 n = lua_gettop(L);
|
||||
int i;
|
||||
|
||||
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT8 ubTargetNPC;
|
||||
UINT32 ItemIndex;
|
||||
UINT32 Grido;
|
||||
INT8 bItemIn;
|
||||
BOOLEAN fPlayerMercsOnly;
|
||||
BOOLEAN bol = FALSE;
|
||||
for (i= 1; i<=n; i++ )
|
||||
{
|
||||
if (i == 1 ) ubTargetNPC = lua_tointeger(L,i);
|
||||
if (i == 2 ) ItemIndex = lua_tointeger(L,i);
|
||||
if (i == 3 ) fPlayerMercsOnly = lua_toboolean(L,i);
|
||||
}
|
||||
|
||||
pSoldier = FindSoldierByProfileID( ubTargetNPC, fPlayerMercsOnly);
|
||||
if (pSoldier)
|
||||
{
|
||||
bItemIn = FindObj( pSoldier, ItemIndex );
|
||||
if (bItemIn != NO_SLOT)
|
||||
{
|
||||
bol = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
lua_pushboolean(L, bol);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_FindItemSoldier (lua_State *L)
|
||||
{
|
||||
UINT8 n = lua_gettop(L);
|
||||
@@ -11055,7 +11095,7 @@ static int l_SetEndMission(lua_State *L)
|
||||
if (i == 1 ) idMission = lua_tointeger(L,i);
|
||||
}
|
||||
|
||||
if ( gBriefingRoomData[idMission].CheckMission == MISSIONSTART )
|
||||
if ( idMission != -1 && gBriefingRoomData[idMission].CheckMission == MISSIONSTART )
|
||||
{
|
||||
gBriefingRoomData[idMission].CheckMission = MISSIONEND; //set end mission
|
||||
nextMission = gBriefingRoomData[idMission].NextMission;
|
||||
@@ -11068,7 +11108,7 @@ static int l_SetEndMission(lua_State *L)
|
||||
|
||||
static int l_SetStartMission(lua_State *L)
|
||||
{
|
||||
UINT32 idMission;
|
||||
UINT32 idMission = 0;
|
||||
UINT8 n = lua_gettop(L);
|
||||
int i = 0;
|
||||
|
||||
@@ -11077,11 +11117,14 @@ static int l_SetStartMission(lua_State *L)
|
||||
if (i == 1 ) idMission = lua_tointeger(L,i);
|
||||
}
|
||||
|
||||
if ( idMission != -1 )
|
||||
{
|
||||
if ( gBriefingRoomData[idMission].CheckMission != MISSIONSTART || gBriefingRoomData[idMission].CheckMission != MISSIONEND || gBriefingRoomData[idMission].CheckMission == MISSIONNOSTARTED )
|
||||
{
|
||||
gBriefingRoomData[idMission].CheckMission = MISSIONSTART; //set start mission
|
||||
gBriefingRoomData[idMission].Hidden = TRUE; // set next mission
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -11098,11 +11141,11 @@ static int l_CheckMission (lua_State *L)
|
||||
if (i == 1 ) idMission = lua_tointeger(L,i);
|
||||
}
|
||||
|
||||
if ( gBriefingRoomData[idMission].CheckMission == MISSIONNOSTARTED)
|
||||
if ( idMission != -1 && gBriefingRoomData[idMission].CheckMission == MISSIONNOSTARTED)
|
||||
Bool = 0;
|
||||
else if ( gBriefingRoomData[idMission].CheckMission == MISSIONSTART)
|
||||
else if ( idMission != -1 && gBriefingRoomData[idMission].CheckMission == MISSIONSTART)
|
||||
Bool = 1;
|
||||
else if (gBriefingRoomData[idMission].CheckMission == MISSIONEND)
|
||||
else if (idMission != -1 && gBriefingRoomData[idMission].CheckMission == MISSIONEND)
|
||||
Bool = 2;
|
||||
|
||||
lua_pushinteger(L, Bool);
|
||||
|
||||
@@ -4426,6 +4426,21 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum
|
||||
HaveNpcOpenUpDealerScreen( ubTargetNPC );
|
||||
break;
|
||||
#endif
|
||||
|
||||
case NPC_ACTION_RECRUIT_PROFILE_TO_EPC:
|
||||
//if ( !CheckNPCIsEPC(ubTargetNPC) )
|
||||
//{
|
||||
RecruitEPC( ubTargetNPC );
|
||||
//}
|
||||
break;
|
||||
|
||||
case NPC_ACTION_UNRECRUIT_EPC:
|
||||
//if ( CheckNPCIsEPC(ubTargetNPC) )
|
||||
// {
|
||||
UnRecruitEPC( ubTargetNPC );
|
||||
// }
|
||||
break;
|
||||
|
||||
default:
|
||||
ScreenMsg( FONT_MCOLOR_RED, MSG_TESTVERSION, L"No code support for NPC action %d", usActionCode );
|
||||
break;
|
||||
|
||||
@@ -383,6 +383,9 @@ enum
|
||||
|
||||
NPC_ACTION_GLOBAL_OFFENSIVE_1,
|
||||
NPC_ACTION_GLOBAL_OFFENSIVE_2,
|
||||
|
||||
NPC_ACTION_RECRUIT_PROFILE_TO_EPC = 700,
|
||||
NPC_ACTION_UNRECRUIT_EPC = 701,
|
||||
};
|
||||
|
||||
#define HOSPITAL_PATIENT_DISTANCE 9
|
||||
|
||||
Reference in New Issue
Block a user