mirror of
https://github.com/halpz/re3.git
synced 2025-07-04 01:30:46 +00:00
Merge branch 'master' into game_dev
This commit is contained in:
@ -25,8 +25,6 @@
|
||||
#include "CdStream.h"
|
||||
#include "FileLoader.h"
|
||||
|
||||
WRAPPER void CFileLoader::ReloadPaths(const char *filename) { EAXJMP(0x476DB0); }
|
||||
|
||||
char CFileLoader::ms_line[256];
|
||||
|
||||
const char*
|
||||
@ -1198,6 +1196,165 @@ CFileLoader::LoadMapZones(const char *filename)
|
||||
debug("Finished loading IPL\n");
|
||||
}
|
||||
|
||||
void
|
||||
CFileLoader::ReloadPaths(const char *filename)
|
||||
{
|
||||
enum {
|
||||
NONE,
|
||||
PATH,
|
||||
};
|
||||
char *line;
|
||||
int section = NONE;
|
||||
int id, pathType, pathIndex = -1;
|
||||
char pathTypeStr[20];
|
||||
debug("Reloading paths from %s...\n", filename);
|
||||
|
||||
int fd = CFileMgr::OpenFile(filename, "r");
|
||||
for (line = CFileLoader::LoadLine(fd); line; line = CFileLoader::LoadLine(fd)) {
|
||||
if (*line == '\0' || *line == '#')
|
||||
continue;
|
||||
|
||||
if (section == NONE) {
|
||||
if (strncmp(line, "path", 4) == 0) {
|
||||
section = PATH;
|
||||
ThePaths.AllocatePathFindInfoMem(4500);
|
||||
}
|
||||
} else if (strncmp(line, "end", 3) == 0) {
|
||||
section = NONE;
|
||||
} else {
|
||||
switch (section) {
|
||||
case PATH:
|
||||
if (pathIndex == -1) {
|
||||
id = LoadPathHeader(line, pathTypeStr);
|
||||
if (strncmp(pathTypeStr, "ped", 4) == 0)
|
||||
pathType = 1;
|
||||
else if (strncmp(pathTypeStr, "car", 4) == 0)
|
||||
pathType = 0;
|
||||
pathIndex = 0;
|
||||
} else {
|
||||
if (pathType == 1)
|
||||
LoadPedPathNode(line, id, pathIndex);
|
||||
else if (pathType == 0)
|
||||
LoadCarPathNode(line, id, pathIndex);
|
||||
pathIndex++;
|
||||
if (pathIndex == 12)
|
||||
pathIndex = -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
CFileMgr::CloseFile(fd);
|
||||
}
|
||||
|
||||
void
|
||||
CFileLoader::ReloadObjectTypes(const char *filename)
|
||||
{
|
||||
enum {
|
||||
NONE,
|
||||
OBJS,
|
||||
TOBJ,
|
||||
TWODFX
|
||||
};
|
||||
char *line;
|
||||
int section = NONE;
|
||||
CModelInfo::ReInit2dEffects();
|
||||
debug("Reloading object types from %s...\n", filename);
|
||||
|
||||
CFileMgr::ChangeDir("\\DATA\\MAPS\\");
|
||||
int fd = CFileMgr::OpenFile(filename, "r");
|
||||
CFileMgr::ChangeDir("\\");
|
||||
for (line = CFileLoader::LoadLine(fd); line; line = CFileLoader::LoadLine(fd)) {
|
||||
if (*line == '\0' || *line == '#')
|
||||
continue;
|
||||
|
||||
if (section == NONE) {
|
||||
if (strncmp(line, "objs", 4) == 0) section = OBJS;
|
||||
else if (strncmp(line, "tobj", 4) == 0) section = TOBJ;
|
||||
else if (strncmp(line, "2dfx", 4) == 0) section = TWODFX;
|
||||
} else if (strncmp(line, "end", 3) == 0) {
|
||||
section = NONE;
|
||||
} else {
|
||||
switch (section) {
|
||||
case OBJS:
|
||||
case TOBJ:
|
||||
ReloadObject(line);
|
||||
break;
|
||||
case TWODFX:
|
||||
Load2dEffect(line);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
CFileMgr::CloseFile(fd);
|
||||
}
|
||||
|
||||
void
|
||||
CFileLoader::ReloadObject(const char *line)
|
||||
{
|
||||
int id, numObjs;
|
||||
char model[24], txd[24];
|
||||
float dist[3];
|
||||
uint32 flags;
|
||||
CSimpleModelInfo *mi;
|
||||
|
||||
if(sscanf(line, "%d %s %s %d", &id, model, txd, &numObjs) != 4)
|
||||
return;
|
||||
|
||||
switch(numObjs){
|
||||
case 1:
|
||||
sscanf(line, "%d %s %s %d %f %d",
|
||||
&id, model, txd, &numObjs, &dist[0], &flags);
|
||||
break;
|
||||
case 2:
|
||||
sscanf(line, "%d %s %s %d %f %f %d",
|
||||
&id, model, txd, &numObjs, &dist[0], &dist[1], &flags);
|
||||
break;
|
||||
case 3:
|
||||
sscanf(line, "%d %s %s %d %f %f %f %d",
|
||||
&id, model, txd, &numObjs, &dist[0], &dist[1], &dist[2], &flags);
|
||||
break;
|
||||
}
|
||||
|
||||
mi = (CSimpleModelInfo*) CModelInfo::GetModelInfo(id);
|
||||
if (
|
||||
#ifdef FIX_BUGS
|
||||
mi &&
|
||||
#endif
|
||||
mi->m_type == MITYPE_SIMPLE && !strcmp(mi->GetName(), model) && mi->m_numAtomics == numObjs) {
|
||||
mi->SetLodDistances(dist);
|
||||
SetModelInfoFlags(mi, flags);
|
||||
} else {
|
||||
printf("Can't reload %s\n", model);
|
||||
}
|
||||
}
|
||||
|
||||
// unused mobile function - crashes
|
||||
void
|
||||
CFileLoader::ReLoadScene(const char *filename)
|
||||
{
|
||||
char *line;
|
||||
CFileMgr::ChangeDir("\\DATA\\");
|
||||
int fd = CFileMgr::OpenFile(filename, "r");
|
||||
CFileMgr::ChangeDir("\\");
|
||||
|
||||
for (line = CFileLoader::LoadLine(fd); line; line = CFileLoader::LoadLine(fd)) {
|
||||
if (*line == '#')
|
||||
continue;
|
||||
|
||||
if (strncmp(line, "EXIT", 9) == 0) // BUG: 9?
|
||||
break;
|
||||
|
||||
if (strncmp(line, "IDE", 3) == 0) {
|
||||
LoadObjectTypes(line + 4);
|
||||
}
|
||||
}
|
||||
CFileMgr::CloseFile(fd);
|
||||
}
|
||||
|
||||
STARTPATCHES
|
||||
InjectHook(0x476290, CFileLoader::LoadLevel, PATCH_JUMP);
|
||||
@ -1233,4 +1390,8 @@ STARTPATCHES
|
||||
InjectHook(0x478A90, CFileLoader::LoadCullZone, PATCH_JUMP);
|
||||
|
||||
InjectHook(0x478550, CFileLoader::LoadMapZones, PATCH_JUMP);
|
||||
|
||||
InjectHook(0x476DB0, CFileLoader::ReloadPaths, PATCH_JUMP);
|
||||
InjectHook(0x476F30, CFileLoader::ReloadObjectTypes, PATCH_JUMP);
|
||||
InjectHook(0x4772B0, CFileLoader::ReloadObject, PATCH_JUMP);
|
||||
ENDPATCHES
|
||||
|
@ -43,4 +43,7 @@ public:
|
||||
static void LoadMapZones(const char *filename);
|
||||
|
||||
static void ReloadPaths(const char *filename);
|
||||
static void ReloadObjectTypes(const char *filename);
|
||||
static void ReloadObject(const char *line);
|
||||
static void ReLoadScene(const char *filename); // unused mobile function
|
||||
};
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "Radar.h"
|
||||
#include "Stats.h"
|
||||
#include "Messages.h"
|
||||
#include "FileLoader.h"
|
||||
|
||||
#define TIDY_UP_PBP // ProcessButtonPresses
|
||||
#define MAX_VISIBLE_LIST_ROW 30
|
||||
@ -44,16 +45,27 @@
|
||||
#define FEET_IN_METER 3.33f
|
||||
#endif
|
||||
|
||||
#define SCROLLABLE_STATS_PAGE
|
||||
#ifdef SCROLLABLE_STATS_PAGE
|
||||
#define isPlainTextScreen(screen) (screen == MENUPAGE_BRIEFS)
|
||||
#else
|
||||
#define isPlainTextScreen(screen) (screen == MENUPAGE_BRIEFS || screen == MENUPAGE_STATS)
|
||||
#endif
|
||||
|
||||
#ifdef TRIANGLE_BACK_BUTTON
|
||||
#define GetBackJustUp GetTriangleJustUp
|
||||
#define GetBackJustDown GetTriangleJustDown
|
||||
#elif defined(CIRCLE_BACK_BUTTON)
|
||||
#define GetBackJustUp GetCircleJustUp
|
||||
#define GetBackJustDown GetCircleJustDown
|
||||
#else
|
||||
#define GetBackJustUp GetSquareJustUp
|
||||
#define GetBackJustDown GetSquareJustDown
|
||||
#endif
|
||||
|
||||
#ifdef MENU_MAP
|
||||
bool CMenuManager::bMenuMapActive = false;
|
||||
bool CMenuManager::bMapMouseShownOnce = false;
|
||||
bool CMenuManager::bMapLoaded = false;
|
||||
float CMenuManager::fMapSize;
|
||||
float CMenuManager::fMapCenterY;
|
||||
float CMenuManager::fMapCenterX;
|
||||
@ -99,14 +111,14 @@ char *CMenuManager::m_PrefsSkinFile = (char*)0x5F2E74; //[256] "$$\"\""
|
||||
|
||||
int32 &CMenuManager::m_KeyPressedCode = *(int32*)0x5F2E70; // -1
|
||||
|
||||
// This is PS2 option color, they forget it here and used in PrintBriefs once(but didn't use the output anyway)
|
||||
#ifdef FIX_BUGS
|
||||
CRGBA TEXT_COLOR = CRGBA(235, 170, 50, 255); // PC briefs text color
|
||||
// Originally that was PS2 option color, they forget it here and used in PrintBriefs once(but didn't use the output anyway)
|
||||
#ifdef PS2_LIKE_MENU
|
||||
const CRGBA TEXT_COLOR = CRGBA(150, 110, 30, 255);
|
||||
#else
|
||||
CRGBA TEXT_COLOR = CRGBA(150, 110, 30, 255);
|
||||
const CRGBA TEXT_COLOR = CRGBA(235, 170, 50, 255); // PC briefs text color
|
||||
#endif
|
||||
|
||||
float menuXYpadding = MENUACTION_POS_Y; // *(float*)0x5F355C; // never changes. not original name
|
||||
const float menuXYpadding = MENUACTION_POS_Y; // *(float*)0x5F355C; // not original name
|
||||
float MENU_TEXT_SIZE_X = SMALLTEXT_X_SCALE; //*(float*)0x5F2E40;
|
||||
float MENU_TEXT_SIZE_Y = SMALLTEXT_Y_SCALE; //*(float*)0x5F2E44;
|
||||
|
||||
@ -119,17 +131,17 @@ uint8 CMenuManager::m_PrefsPlayerRed = 255;
|
||||
uint8 CMenuManager::m_PrefsPlayerGreen = 128;
|
||||
uint8 CMenuManager::m_PrefsPlayerBlue; // why??
|
||||
|
||||
CMenuManager &FrontEndMenuManager = *(CMenuManager*)0x8F59D8;
|
||||
CMenuManager FrontEndMenuManager; // = *(CMenuManager*)0x8F59D8;
|
||||
|
||||
// Move this somewhere else.
|
||||
float &CRenderer::ms_lodDistScale = *(float*)0x5F726C; // 1.2
|
||||
float CRenderer::ms_lodDistScale = 1.2f; // *(float*)0x5F726C;
|
||||
|
||||
uint32 &TimeToStopPadShaking = *(uint32*)0x628CF8;
|
||||
char *&pEditString = *(char**)0x628D00;
|
||||
int32 *&pControlEdit = *(int32**)0x628D08;
|
||||
bool &DisplayComboButtonErrMsg = *(bool*)0x628D14;
|
||||
int32 &MouseButtonJustClicked = *(int32*)0x628D0C;
|
||||
int32 &JoyButtonJustClicked = *(int32*)0x628D10;
|
||||
uint32 TimeToStopPadShaking; // = *(uint32*)0x628CF8;
|
||||
char *pEditString; // = *(char**)0x628D00;
|
||||
int32 *pControlEdit; // = *(int32**)0x628D08;
|
||||
bool DisplayComboButtonErrMsg; // = *(bool*)0x628D14;
|
||||
int32 MouseButtonJustClicked; // = *(int32*)0x628D0C;
|
||||
int32 JoyButtonJustClicked; // = *(int32*)0x628D10;
|
||||
//int32 *pControlTemp = 0;
|
||||
|
||||
#ifndef MASTER
|
||||
@ -359,11 +371,6 @@ CMenuManager::PageDownList(bool playSoundOnSuccess)
|
||||
inline void
|
||||
CMenuManager::ThingsToDoBeforeLeavingPage()
|
||||
{
|
||||
#ifndef MASTER
|
||||
if (m_nCurrScreen == MENUPAGE_NO_MEMORY_CARD || m_nCurrScreen == MENUPAGE_MEMORY_CARD_DEBUG) {
|
||||
SaveSettings();
|
||||
}
|
||||
#endif
|
||||
if ((m_nCurrScreen == MENUPAGE_SKIN_SELECT) && strcmp(m_aSkinName, m_PrefsSkinFile) != 0) {
|
||||
CWorld::Players[0].SetPlayerSkin(m_PrefsSkinFile);
|
||||
} else if (m_nCurrScreen == MENUPAGE_SOUND_SETTINGS) {
|
||||
@ -719,13 +726,6 @@ CMenuManager::Draw()
|
||||
else
|
||||
str = TheText.Get(aScreens[m_nCurrScreen].m_aEntries[0].m_EntryName);
|
||||
break;
|
||||
#ifndef MASTER
|
||||
case MENUPAGE_NO_MEMORY_CARD:
|
||||
case MENUPAGE_MEMORY_CARD_DEBUG:
|
||||
CFont::SetColor(CRGBA(235, 170, 50, FadeIn(127))); // white in mobile, because all texts are white there
|
||||
str = TheText.Get(aScreens[m_nCurrScreen].m_aEntries[0].m_EntryName);
|
||||
break;
|
||||
#endif
|
||||
case MENUPAGE_SAVE_OVERWRITE_CONFIRM:
|
||||
if (Slots[m_nCurrSaveSlot + 1] == SLOT_EMPTY)
|
||||
str = TheText.Get("FESZ_QZ");
|
||||
@ -743,20 +743,12 @@ CMenuManager::Draw()
|
||||
break;
|
||||
}
|
||||
|
||||
#ifndef MASTER
|
||||
if (m_nCurrScreen == MENUPAGE_NO_MEMORY_CARD || m_nCurrScreen == MENUPAGE_MEMORY_CARD_DEBUG) {
|
||||
// CFont::SetWrapx(MENU_X_RIGHT_ALIGNED(MENU_X_MARGIN)); // it's always like that on PC
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(MENU_X_MARGIN), MENU_Y(210.0), str);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
#ifdef FIX_BUGS
|
||||
// Label is wrapped from right by StretchX(40)px, but wrapped from left by 40px. And this is only place R* didn't use StretchX in here.
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(MENU_X_MARGIN), MENU_Y(menuXYpadding), str);
|
||||
// Label is wrapped from right by StretchX(40)px, but wrapped from left by 40px. And this is only place R* didn't use StretchX in here.
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(MENU_X_MARGIN), MENU_Y(menuXYpadding), str);
|
||||
#else
|
||||
CFont::PrintString(MENU_X_MARGIN, menuXYpadding, str);
|
||||
CFont::PrintString(MENU_X_MARGIN, menuXYpadding, str);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
CFont::SetCentreSize(SCREEN_WIDTH);
|
||||
@ -853,6 +845,10 @@ CMenuManager::Draw()
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
CFont::SetFontStyle(FONT_BANK);
|
||||
#endif
|
||||
|
||||
switch (m_nCurrScreen) {
|
||||
case MENUPAGE_CONTROLLER_PC_OLD1:
|
||||
case MENUPAGE_CONTROLLER_PC_OLD2:
|
||||
@ -2149,7 +2145,7 @@ CMenuManager::DrawFrontEndNormal()
|
||||
}
|
||||
|
||||
#define optionWidth MENU_X(66.0f)
|
||||
#define rawOptionHeight 20.0f
|
||||
#define rawOptionHeight 22.0f
|
||||
#define optionBottom SCREEN_SCALE_FROM_BOTTOM(20.0f)
|
||||
#define optionTop SCREEN_SCALE_FROM_BOTTOM(20.0f + rawOptionHeight)
|
||||
#define leftPadding MENU_X_LEFT_ALIGNED(90.0f)
|
||||
@ -3196,31 +3192,33 @@ CMenuManager::PrintBriefs()
|
||||
newColor = TEXT_COLOR;
|
||||
FilterOutColorMarkersFromString(gUString, newColor);
|
||||
|
||||
// newColor wasn't used at all! let's fix this
|
||||
#ifdef PS2_LIKE_MENU
|
||||
// This PS2 code was always here, but unused
|
||||
bool rgSame = newColor.r == TEXT_COLOR.r && newColor.g == TEXT_COLOR.g;
|
||||
bool bSame = rgSame && newColor.b == TEXT_COLOR.b;
|
||||
bool colorNotChanged = bSame
|
||||
#ifndef FIX_BUGS
|
||||
&& newColor.a == TEXT_COLOR.a
|
||||
#endif
|
||||
;
|
||||
bool colorNotChanged = bSame; /* && newColor.a == TEXT_COLOR.a; */
|
||||
|
||||
if (!colorNotChanged) {
|
||||
newColor.r /= 2;
|
||||
newColor.g /= 2;
|
||||
newColor.b /= 2;
|
||||
}
|
||||
#ifdef FIX_BUGS
|
||||
newColor.a = FadeIn(255);
|
||||
// because some colors aren't visible, due to they were made for PS2
|
||||
CFont::SetDropColor(CRGBA(0, 0, 0, FadeIn(255)));
|
||||
CFont::SetDropColor(CRGBA(0, 0, 0, FadeIn(255))); // But this is from PS2
|
||||
CFont::SetDropShadowPosition(1);
|
||||
#endif
|
||||
|
||||
#if defined(FIX_BUGS) || defined(PS2_LIKE_MENU)
|
||||
newColor.a = FadeIn(255);
|
||||
CFont::SetColor(newColor);
|
||||
#endif
|
||||
CFont::PrintString(MENU_X_LEFT_ALIGNED(50.0f), nextY, gUString);
|
||||
nextY += MENU_Y(menuXYpadding);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
CFont::SetDropShadowPosition(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Not sure about name. Not to be confused with CPad::PrintErrorMessage
|
||||
@ -3337,6 +3335,7 @@ CMenuManager::Process(void)
|
||||
m_bWantToRestart = false;
|
||||
InitialiseChangedLanguageSettings();
|
||||
|
||||
// Just a hack by R* to not make game continuously resume/pause. But we it seems we can live with it.
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown())
|
||||
RequestFrontEndStartUp();
|
||||
|
||||
@ -3662,7 +3661,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
}
|
||||
|
||||
#ifndef TIDY_UP_PBP
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetSquareJustDown()) {
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetBackJustDown()) {
|
||||
m_bShowMouse = false;
|
||||
goBack = true;
|
||||
}
|
||||
@ -3741,7 +3740,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
if (CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetCrossJustDown() || CPad::GetPad(0)->GetLeftMouseJustDown()) {
|
||||
optionSelected = true;
|
||||
}
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetSquareJustUp()) {
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetBackJustUp()) {
|
||||
if (m_nCurrScreen != MENUPAGE_START_MENU) {
|
||||
goBack = true;
|
||||
}
|
||||
@ -4009,7 +4008,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
|
||||
}
|
||||
#ifndef TIDY_UP_PBP
|
||||
if (CPad::GetPad(0)->GetSquareJustDown()) {
|
||||
if (CPad::GetPad(0)->GetBackJustDown()) {
|
||||
if (m_nCurrScreen != MENUPAGE_START_MENU && m_nCurrScreen != MENUPAGE_PAUSE_MENU) {
|
||||
m_bShowMouse = false;
|
||||
goBack = true;
|
||||
@ -4050,11 +4049,11 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
if (!goDown && !goUp && !optionSelected) {
|
||||
if (m_nCurrScreen != MENUPAGE_START_MENU) {
|
||||
if (isPlainTextScreen(m_nCurrScreen)) {
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetSquareJustUp()) {
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetBackJustUp()) {
|
||||
goBack = true;
|
||||
}
|
||||
} else {
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown() || (m_nCurrScreen != MENUPAGE_PAUSE_MENU && CPad::GetPad(0)->GetSquareJustDown())) {
|
||||
if (CPad::GetPad(0)->GetEscapeJustDown() || (m_nCurrScreen != MENUPAGE_PAUSE_MENU && CPad::GetPad(0)->GetBackJustDown())) {
|
||||
m_bShowMouse = false;
|
||||
goBack = true;
|
||||
}
|
||||
@ -4300,12 +4299,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
} else {
|
||||
#ifdef MENU_MAP
|
||||
if (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu == MENUPAGE_MAP) {
|
||||
fMapCenterX = SCREEN_WIDTH / 2;
|
||||
fMapCenterY = SCREEN_HEIGHT / 3;
|
||||
fMapSize = SCREEN_HEIGHT / CDraw::GetAspectRatio();
|
||||
bMapMouseShownOnce = false;
|
||||
CPad::GetPad(0)->Clear(false);
|
||||
CPad::GetPad(1)->Clear(false);
|
||||
bMapLoaded = false;
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -4330,8 +4324,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
DoSettingsBeforeStartingAGame();
|
||||
break;
|
||||
case MENUACTION_RELOADIDE:
|
||||
// TODO
|
||||
// CFileLoader::ReloadObjectTypes("GTA3.IDE");
|
||||
CFileLoader::ReloadObjectTypes("GTA3.IDE");
|
||||
break;
|
||||
case MENUACTION_RELOADIPL:
|
||||
CGame::ReloadIPLs();
|
||||
@ -4913,8 +4906,19 @@ CMenuManager::SwitchMenuOnAndOff()
|
||||
pControlEdit = nil;
|
||||
m_bShutDownFrontEndRequested = false;
|
||||
DisplayComboButtonErrMsg = false;
|
||||
CPad::GetPad(0)->Clear(0);
|
||||
CPad::GetPad(1)->Clear(0);
|
||||
|
||||
#ifdef REGISTER_START_BUTTON
|
||||
int16 start1 = CPad::GetPad(0)->PCTempJoyState.Start, start2 = CPad::GetPad(0)->PCTempKeyState.Start,
|
||||
start3 = CPad::GetPad(0)->OldState.Start, start4 = CPad::GetPad(0)->NewState.Start;
|
||||
#endif
|
||||
CPad::GetPad(0)->Clear(false);
|
||||
CPad::GetPad(1)->Clear(false);
|
||||
#ifdef REGISTER_START_BUTTON
|
||||
CPad::GetPad(0)->PCTempJoyState.Start = start1;
|
||||
CPad::GetPad(0)->PCTempKeyState.Start = start2;
|
||||
CPad::GetPad(0)->OldState.Start = start3;
|
||||
CPad::GetPad(0)->NewState.Start = start4;
|
||||
#endif
|
||||
m_nCurrScreen = MENUPAGE_NONE;
|
||||
}
|
||||
}
|
||||
@ -5025,7 +5029,7 @@ CMenuManager::PrintController(void)
|
||||
CFont::SetFontStyle(FONT_BANK); // X
|
||||
|
||||
// CFont::SetScale(0.4f, 0.4f);
|
||||
CFont::SetScale(MENU_X(SMALLTEXT_X_SCALE), MENU_Y(SMALLTEXT_Y_SCALE)); // X
|
||||
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE), MENU_Y(SMALLESTTEXT_Y_SCALE)); // X
|
||||
|
||||
// CFont::SetColor(CRGBA(128, 128, 128, FadeIn(255)));
|
||||
CFont::SetDropColor(CRGBA(0, 0, 0, FadeIn(255))); // X
|
||||
@ -5219,6 +5223,8 @@ CMenuManager::PrintController(void)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
CFont::SetDropShadowPosition(0); // X
|
||||
}
|
||||
|
||||
#ifdef MENU_MAP
|
||||
@ -5243,6 +5249,20 @@ CMenuManager::PrintMap(void)
|
||||
bMenuMapActive = true;
|
||||
CRadar::InitFrontEndMap();
|
||||
|
||||
if (!bMapLoaded) {
|
||||
fMapCenterX = SCREEN_WIDTH / 2;
|
||||
fMapCenterY = SCREEN_HEIGHT / 3;
|
||||
fMapSize = SCREEN_HEIGHT / CDraw::GetAspectRatio();
|
||||
bMapMouseShownOnce = false;
|
||||
bMapLoaded = true;
|
||||
|
||||
// Let's wait for a frame to not toggle the waypoint
|
||||
if (CPad::GetPad(0)->NewState.Cross) {
|
||||
bMenuMapActive = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Because fMapSize is half of the map length, and map consists of 3x3 tiles.
|
||||
float halfTile = fMapSize / 3.0f;
|
||||
|
||||
@ -5601,6 +5621,9 @@ uint8 CMenuManager::GetNumberOfMenuOptions()
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef GetBackJustUp
|
||||
#undef GetBackJustDown
|
||||
|
||||
STARTPATCHES
|
||||
for (int i = 1; i < ARRAY_SIZE(aScreens); i++)
|
||||
Patch(0x611930 + sizeof(CMenuScreen) * i, aScreens[i]);
|
||||
|
@ -196,7 +196,7 @@ enum eMenuScreen
|
||||
MENUPAGE_NEW_GAME_RELOAD = 10,
|
||||
MENUPAGE_LOAD_SLOT_CONFIRM = 11,
|
||||
MENUPAGE_DELETE_SLOT_CONFIRM = 12,
|
||||
MENUPAGE_NO_MEMORY_CARD = 13,
|
||||
MENUPAGE_NO_MEMORY_CARD = 13, // hud adjustment page in mobile
|
||||
MENUPAGE_LOADING_IN_PROGRESS = 14,
|
||||
MENUPAGE_DELETING_IN_PROGRESS = 15,
|
||||
MENUPAGE_PS2_LOAD_FAILED = 16,
|
||||
@ -240,7 +240,7 @@ enum eMenuScreen
|
||||
MENUPAGE_SKIN_SELECT = 54,
|
||||
MENUPAGE_KEYBOARD_CONTROLS = 55,
|
||||
MENUPAGE_MOUSE_CONTROLS = 56,
|
||||
MENUPAGE_57 = 57,
|
||||
MENUPAGE_57 = 57, // mission failed, wanna restart page in mobile
|
||||
MENUPAGE_58 = 58,
|
||||
#ifdef MENU_MAP
|
||||
MENUPAGE_MAP = 59,
|
||||
@ -570,6 +570,7 @@ public:
|
||||
#ifdef MENU_MAP
|
||||
static bool bMenuMapActive;
|
||||
static bool bMapMouseShownOnce;
|
||||
static bool bMapLoaded;
|
||||
static float fMapSize;
|
||||
static float fMapCenterY;
|
||||
static float fMapCenterX;
|
||||
@ -639,4 +640,4 @@ public:
|
||||
|
||||
static_assert(sizeof(CMenuManager) == 0x564, "CMenuManager: error");
|
||||
|
||||
extern CMenuManager &FrontEndMenuManager;
|
||||
extern CMenuManager FrontEndMenuManager;
|
||||
|
@ -128,7 +128,7 @@ const CMenuScreen aScreens[] = {
|
||||
|
||||
// MENUPAGE_NO_MEMORY_CARD = 13
|
||||
{ "FES_NOC", 1, MENUPAGE_DISABLED, MENUPAGE_DISABLED, 0, 0,
|
||||
MENUACTION_LABEL, "FEC_OFI", SAVESLOT_NONE, MENUPAGE_NONE, // only in mobile. FEC_OFI is missing
|
||||
// hud adjustment page in mobile
|
||||
},
|
||||
|
||||
// MENUPAGE_LOADING_IN_PROGRESS = 14
|
||||
@ -281,7 +281,6 @@ const CMenuScreen aScreens[] = {
|
||||
MENUACTION_CTRLMETHOD, "FET_CME", SAVESLOT_NONE, MENUPAGE_CONTROLLER_PC,
|
||||
MENUACTION_CHANGEMENU, "FET_RDK", SAVESLOT_NONE, MENUPAGE_KEYBOARD_CONTROLS,
|
||||
MENUACTION_CHANGEMENU, "FET_AMS", SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS,
|
||||
|
||||
MENUACTION_RESTOREDEF, "FET_DEF", SAVESLOT_NONE, MENUPAGE_CONTROLLER_PC,
|
||||
MENUACTION_CHANGEMENU, "FEDS_TB", SAVESLOT_NONE, MENUPAGE_NONE,
|
||||
},
|
||||
@ -444,7 +443,7 @@ const CMenuScreen aScreens[] = {
|
||||
|
||||
// MENUPAGE_57 = 57
|
||||
{ "", 0, MENUPAGE_NONE, MENUPAGE_NONE, 0, 0,
|
||||
|
||||
// mission failed, wanna restart page in mobile
|
||||
},
|
||||
|
||||
// MENUPAGE_58 = 58
|
||||
|
@ -418,6 +418,7 @@ public:
|
||||
bool GetLeftStickXJustDown() { return !!(NewState.LeftStickX && !OldState.LeftStickX); }
|
||||
bool GetLeftStickYJustDown() { return !!(NewState.LeftStickY && !OldState.LeftStickY); }
|
||||
|
||||
bool GetTriangleJustUp() { return !!(!NewState.Triangle && OldState.Triangle); }
|
||||
bool GetCrossJustUp() { return !!(!NewState.Cross && OldState.Cross); }
|
||||
bool GetSquareJustUp() { return !!(!NewState.Square && OldState.Square); }
|
||||
bool GetDPadUpJustUp() { return !!(!NewState.DPadUp && OldState.DPadUp); }
|
||||
|
@ -183,7 +183,7 @@ INITSAVEBUF
|
||||
if (!pVehicle)
|
||||
continue;
|
||||
bool bHasPassenger = false;
|
||||
for (int j = 0; j < 8; j++) {
|
||||
for (int j = 0; j < ARRAY_SIZE(pVehicle->pPassengers); j++) {
|
||||
if (pVehicle->pPassengers[i])
|
||||
bHasPassenger = true;
|
||||
}
|
||||
@ -203,7 +203,7 @@ INITSAVEBUF
|
||||
if (!pVehicle)
|
||||
continue;
|
||||
bool bHasPassenger = false;
|
||||
for (int j = 0; j < 8; j++) {
|
||||
for (int j = 0; j < ARRAY_SIZE(pVehicle->pPassengers); j++) {
|
||||
if (pVehicle->pPassengers[j])
|
||||
bHasPassenger = true;
|
||||
}
|
||||
|
@ -53,6 +53,9 @@ public:
|
||||
static void Stop(void);
|
||||
static void StartUserPause(void);
|
||||
static void EndUserPause(void);
|
||||
|
||||
friend bool GenericLoad(void);
|
||||
friend bool GenericSave(int file);
|
||||
};
|
||||
|
||||
#ifdef FIX_BUGS
|
||||
|
@ -87,6 +87,7 @@ enum Config {
|
||||
NUMSCRIPTEDPICKUPS = 16,
|
||||
NUMPICKUPS = NUMGENERALPICKUPS + NUMSCRIPTEDPICKUPS,
|
||||
NUMCOLLECTEDPICKUPS = 20,
|
||||
NUMPACMANPICKUPS = 256,
|
||||
NUMEVENTS = 64,
|
||||
|
||||
NUM_CARGENS = 160,
|
||||
@ -192,7 +193,7 @@ enum Config {
|
||||
// Pad
|
||||
#define XINPUT
|
||||
#define KANGAROO_CHEAT
|
||||
#define REGISTER_START_BUTTON // currently only in menu sadly. resumes the game
|
||||
#define REGISTER_START_BUTTON
|
||||
|
||||
// Hud, frontend and radar
|
||||
#define ASPECT_RATIO_SCALE // Not just makes everything scale with aspect ratio, also adds support for all aspect ratios
|
||||
@ -200,6 +201,9 @@ enum Config {
|
||||
#define PS2_SAVE_DIALOG // PS2 style save dialog with transparent black box
|
||||
// #define PS2_LIKE_MENU // An effort to recreate PS2 menu, cycling through tabs, different bg etc.
|
||||
#define MENU_MAP // VC-like menu map. Make sure you have new menu.txd
|
||||
#define SCROLLABLE_STATS_PAGE // only draggable by mouse atm
|
||||
#define TRIANGLE_BACK_BUTTON
|
||||
// #define CIRCLE_BACK_BUTTON
|
||||
|
||||
// Script
|
||||
#define USE_DEBUG_SCRIPT_LOADER // makes game load main_freeroam.scm by default
|
||||
|
@ -151,19 +151,6 @@ SpawnCar(int id)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
LetThemFollowYou(void) {
|
||||
CPed *player = (CPed*) FindPlayerPed();
|
||||
for (int i = 0; i < player->m_numNearPeds; i++) {
|
||||
CPed *nearPed = player->m_nearPeds[i];
|
||||
if (nearPed && !nearPed->IsPlayer()) {
|
||||
nearPed->SetObjective(OBJECTIVE_FOLLOW_PED_IN_FORMATION, (void*)player);
|
||||
nearPed->m_pedFormation = (eFormation)(1 + (rand() & 7));
|
||||
nearPed->bScriptObjectiveCompleted = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
FixCar(void)
|
||||
{
|
||||
@ -344,6 +331,7 @@ DebugMenuPopulate(void)
|
||||
DebugMenuAddCmd("Spawn", "Spawn Dodo", [](){ SpawnCar(MI_DODO); });
|
||||
DebugMenuAddCmd("Spawn", "Spawn Rhino", [](){ SpawnCar(MI_RHINO); });
|
||||
DebugMenuAddCmd("Spawn", "Spawn Firetruck", [](){ SpawnCar(MI_FIRETRUCK); });
|
||||
DebugMenuAddCmd("Spawn", "Spawn Predator", [](){ SpawnCar(MI_PREDATOR); });
|
||||
|
||||
DebugMenuAddVarBool8("Debug", "Draw hud", (int8*)&CHud::m_Wants_To_Draw_Hud, nil);
|
||||
DebugMenuAddVarBool8("Debug", "Edit on", (int8*)&CSceneEdit::m_bEditOn, nil);
|
||||
@ -372,8 +360,6 @@ DebugMenuPopulate(void)
|
||||
DebugMenuAddVarBool8("Debug", "Don't render Peds", (int8*)&gbDontRenderPeds, nil);
|
||||
DebugMenuAddVarBool8("Debug", "Don't render Vehicles", (int8*)&gbDontRenderVehicles, nil);
|
||||
DebugMenuAddVarBool8("Debug", "Don't render Objects", (int8*)&gbDontRenderObjects, nil);
|
||||
|
||||
DebugMenuAddCmd("Debug", "Make peds follow you in formation", LetThemFollowYou);
|
||||
#ifdef TOGGLEABLE_BETA_FEATURES
|
||||
DebugMenuAddVarBool8("Debug", "Toggle banned particles", (int8*)&CParticle::bEnableBannedParticles, nil);
|
||||
DebugMenuAddVarBool8("Debug", "Toggle popping heads on headshot", (int8*)&CPed::bPopHeadsOnHeadshot, nil);
|
||||
|
Reference in New Issue
Block a user