- 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:
Wanne
2013-06-13 22:34:43 +00:00
parent 742494ec77
commit 8f41617845
9 changed files with 187 additions and 6 deletions
+9
View File
@@ -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;
+11
View File
@@ -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 ];
+10
View File
@@ -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 ];
+77
View File
@@ -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
+2
View File
@@ -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
View File
@@ -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;
}
}
+48 -5
View File
@@ -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);
+15
View File
@@ -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;
+3
View File
@@ -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