mirror of
https://github.com/fallout2-ce/fallout2-ce.git
synced 2026-07-27 16:47:11 -07:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46376960d9 |
+21
-4
@@ -13,6 +13,7 @@
|
||||
#include "memory.h"
|
||||
#include "proto.h"
|
||||
#include "settings.h"
|
||||
#include "sfall_config.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
@@ -199,16 +200,32 @@ int artInit()
|
||||
|
||||
// SFALL: Modify player model settings.
|
||||
char* jumpsuitMaleFileName = nullptr;
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "model_male_default", &jumpsuitMaleFileName, gDefaultJumpsuitMaleFileName);
|
||||
if (!configGetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "MaleDefaultModel", &jumpsuitMaleFileName, nullptr)
|
||||
|| jumpsuitMaleFileName == nullptr
|
||||
|| jumpsuitMaleFileName[0] == '\0') {
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "model_male_default", &jumpsuitMaleFileName, gDefaultJumpsuitMaleFileName);
|
||||
}
|
||||
|
||||
char* jumpsuitFemaleFileName = nullptr;
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "model_female_default", &jumpsuitFemaleFileName, gDefaultJumpsuitFemaleFileName);
|
||||
if (!configGetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "FemaleDefaultModel", &jumpsuitFemaleFileName, nullptr)
|
||||
|| jumpsuitFemaleFileName == nullptr
|
||||
|| jumpsuitFemaleFileName[0] == '\0') {
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "model_female_default", &jumpsuitFemaleFileName, gDefaultJumpsuitFemaleFileName);
|
||||
}
|
||||
|
||||
char* tribalMaleFileName = nullptr;
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "model_male", &tribalMaleFileName, gDefaultTribalMaleFileName);
|
||||
if (!configGetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "MaleStartModel", &tribalMaleFileName, nullptr)
|
||||
|| tribalMaleFileName == nullptr
|
||||
|| tribalMaleFileName[0] == '\0') {
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "model_male", &tribalMaleFileName, gDefaultTribalMaleFileName);
|
||||
}
|
||||
|
||||
char* tribalFemaleFileName = nullptr;
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "model_female", &tribalFemaleFileName, gDefaultTribalFemaleFileName);
|
||||
if (!configGetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "FemaleStartModel", &tribalFemaleFileName, nullptr)
|
||||
|| tribalFemaleFileName == nullptr
|
||||
|| tribalFemaleFileName[0] == '\0') {
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "model_female", &tribalFemaleFileName, gDefaultTribalFemaleFileName);
|
||||
}
|
||||
|
||||
char* critterFileNames = gArtListDescriptions[OBJ_TYPE_CRITTER].fileNames;
|
||||
for (int critterIndex = 0; critterIndex < gArtListDescriptions[OBJ_TYPE_CRITTER].fileNamesLength; critterIndex++) {
|
||||
|
||||
+17
-1
@@ -16,6 +16,7 @@
|
||||
#include "palette.h"
|
||||
#include "platform_compat.h"
|
||||
#include "settings.h"
|
||||
#include "sfall_config.h"
|
||||
#include "svga.h"
|
||||
#include "text_font.h"
|
||||
#include "touch.h"
|
||||
@@ -32,7 +33,7 @@ static char* gameMovieBuildSubtitlesFilePath(char* movieFilePath);
|
||||
static const float flt_50352A = 0.032258064f;
|
||||
|
||||
// 0x518DA0
|
||||
static const char* gMovieFileNames[MOVIE_COUNT] = {
|
||||
static const char* gMovieDefaultFileNames[MOVIE_COUNT] = {
|
||||
"iplogo.mve",
|
||||
"intro.mve",
|
||||
"elder.mve",
|
||||
@@ -52,6 +53,8 @@ static const char* gMovieFileNames[MOVIE_COUNT] = {
|
||||
"credits.mve",
|
||||
};
|
||||
|
||||
static char gMovieFileNames[MOVIE_COUNT][65];
|
||||
|
||||
// 0x518DE4
|
||||
static const char* gMoviePaletteFilePaths[MOVIE_COUNT] = {
|
||||
nullptr,
|
||||
@@ -98,6 +101,19 @@ int gameMoviesInit()
|
||||
|
||||
movieSetBuildSubtitleFilePathProc(gameMovieBuildSubtitlesFilePath);
|
||||
|
||||
for (int movie = 0; movie < MOVIE_COUNT; movie++) {
|
||||
strcpy(gMovieFileNames[movie], gMovieDefaultFileNames[movie]);
|
||||
|
||||
char key[16];
|
||||
snprintf(key, sizeof(key), "Movie%d", movie + 1);
|
||||
|
||||
char* movieFileName = nullptr;
|
||||
if (configGetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, key, &movieFileName) && movieFileName[0] != '\0') {
|
||||
strncpy(gMovieFileNames[movie], movieFileName, sizeof(gMovieFileNames[movie]) - 1);
|
||||
gMovieFileNames[movie][sizeof(gMovieFileNames[movie]) - 1] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
memset(gGameMoviesSeen, 0, sizeof(gGameMoviesSeen));
|
||||
|
||||
gGameMovieIsPlaying = false;
|
||||
|
||||
+4
-1
@@ -34,6 +34,7 @@
|
||||
#include "scripts.h"
|
||||
#include "settings.h"
|
||||
#include "sfall_callbacks.h"
|
||||
#include "sfall_config.h"
|
||||
#include "sfall_global_scripts.h"
|
||||
#include "svga.h"
|
||||
#include "text_font.h"
|
||||
@@ -137,7 +138,9 @@ int falloutMain(int argc, char** argv)
|
||||
|
||||
// SFALL: Override starting map.
|
||||
char* mapName = nullptr;
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "map", &mapName, nullptr);
|
||||
if (!configGetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "StartingMap", &mapName, nullptr) || mapName == nullptr || mapName[0] == '\0') {
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_START_SECTION, "map", &mapName, nullptr);
|
||||
}
|
||||
|
||||
char* mapNameCopy = compat_strdup(mapName != nullptr ? mapName : _mainMap);
|
||||
_main_load_new(mapNameCopy);
|
||||
|
||||
+18
-9
@@ -13,6 +13,7 @@
|
||||
#include "mouse.h"
|
||||
#include "palette.h"
|
||||
#include "preferences.h"
|
||||
#include "sfall_config.h"
|
||||
#include "svga.h"
|
||||
#include "text_font.h"
|
||||
#include "version.h"
|
||||
@@ -38,6 +39,16 @@ typedef enum MainMenuButton {
|
||||
static int main_menu_fatal_error();
|
||||
static void main_menu_play_sound(const char* fileName);
|
||||
|
||||
static int mainMenuGetIntSetting(const char* contentKey, const char* sfallKey, int defaultValue)
|
||||
{
|
||||
int value = defaultValue;
|
||||
if (configGetInt(&gSfallConfig, SFALL_CONFIG_MISC_KEY, sfallKey, &value)) {
|
||||
return value;
|
||||
}
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, contentKey, &value);
|
||||
return value;
|
||||
}
|
||||
|
||||
// 0x5194F0
|
||||
static int gMainMenuWindow = -1;
|
||||
|
||||
@@ -131,15 +142,14 @@ int mainMenuWindowInit()
|
||||
// 0x010000 - change the color for version string only
|
||||
// 0x020000 - underline text (only for the version string)
|
||||
// 0x040000 - monospace font (only for the version string)
|
||||
int fontSettings = _colorTable[21091], fontSettingsSFall = 0;
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, "font_color", &fontSettingsSFall, 0);
|
||||
int fontSettings = _colorTable[21091];
|
||||
int fontSettingsSFall = mainMenuGetIntSetting("font_color", "MainMenuFontColour", 0);
|
||||
if (fontSettingsSFall && !(fontSettingsSFall & 0x010000))
|
||||
fontSettings = fontSettingsSFall & 0xFF;
|
||||
|
||||
// SFALL: Allow to move copyright text
|
||||
int offsetX = 0, offsetY = 0;
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, "credits_offset_x", &offsetX, 0);
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, "credits_offset_y", &offsetY, 0);
|
||||
int offsetX = mainMenuGetIntSetting("credits_offset_x", "MainMenuCreditsOffsetX", 0);
|
||||
int offsetY = mainMenuGetIntSetting("credits_offset_y", "MainMenuCreditsOffsetY", 0);
|
||||
|
||||
// Copyright.
|
||||
msg.num = 20;
|
||||
@@ -187,8 +197,8 @@ int mainMenuWindowInit()
|
||||
}
|
||||
|
||||
// SFALL: Allow to move menu buttons
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, "offset_x", &offsetX, 0);
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, "offset_y", &offsetY, 0);
|
||||
offsetX = mainMenuGetIntSetting("offset_x", "MainMenuOffsetX", 0);
|
||||
offsetY = mainMenuGetIntSetting("offset_y", "MainMenuOffsetY", 0);
|
||||
|
||||
for (int index = 0; index < MAIN_MENU_BUTTON_COUNT; index++) {
|
||||
gMainMenuButtons[index] = buttonCreate(gMainMenuWindow,
|
||||
@@ -216,8 +226,7 @@ int mainMenuWindowInit()
|
||||
|
||||
// SFALL: Allow to change font color of buttons
|
||||
fontSettings = _colorTable[21091];
|
||||
fontSettingsSFall = 0;
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, "big_font_color", &fontSettingsSFall, 0);
|
||||
fontSettingsSFall = mainMenuGetIntSetting("big_font_color", "MainMenuBigFontColour", 0);
|
||||
if (fontSettingsSFall)
|
||||
fontSettings = fontSettingsSFall & 0xFF;
|
||||
|
||||
|
||||
+4
-1
@@ -36,6 +36,7 @@
|
||||
#include "random.h"
|
||||
#include "scripts.h"
|
||||
#include "settings.h"
|
||||
#include "sfall_config.h"
|
||||
#include "sfall_script_hooks.h"
|
||||
#include "stat.h"
|
||||
#include "svga.h"
|
||||
@@ -869,7 +870,9 @@ static void _pip_init_()
|
||||
// bypassed. CE implements only the latter approach, as it does not have any
|
||||
// side effects.
|
||||
int value = 0;
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_START_SECTION, "pipboy", &value, 0);
|
||||
if (!configGetInt(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "PipBoyAvailableAtGameStart", &value, 0)) {
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_START_SECTION, "pipboy", &value, 0);
|
||||
}
|
||||
pipboy_available_at_game_start = value == 1 || value == 2;
|
||||
}
|
||||
|
||||
|
||||
+10
-3
@@ -33,6 +33,7 @@
|
||||
#include "queue.h"
|
||||
#include "scan_unimplemented.h"
|
||||
#include "sfall_arrays.h"
|
||||
#include "sfall_config.h"
|
||||
#include "sfall_global_scripts.h"
|
||||
#include "sfall_script_hooks.h"
|
||||
#include "stat.h"
|
||||
@@ -1517,9 +1518,15 @@ int scriptsInit()
|
||||
|
||||
messageListRepositorySetStandardMessageList(STANDARD_MESSAGE_LIST_SCRIPT, &gScrMessageList);
|
||||
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_START_SECTION, "year", &gStartYear, 2241);
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_START_SECTION, "month", &gStartMonth, 6);
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_START_SECTION, "day", &gStartDay, 24);
|
||||
if (!configGetInt(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "StartYear", &gStartYear, 2241)) {
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_START_SECTION, "year", &gStartYear, 2241);
|
||||
}
|
||||
if (!configGetInt(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "StartMonth", &gStartMonth, 6)) {
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_START_SECTION, "month", &gStartMonth, 6);
|
||||
}
|
||||
if (!configGetInt(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "StartDay", &gStartDay, 24)) {
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_START_SECTION, "day", &gStartDay, 24);
|
||||
}
|
||||
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MOVIES_SECTION, "artimer1", &gMovieTimerArtimer1, 90);
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_MOVIES_SECTION, "artimer2", &gMovieTimerArtimer2, 180);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "display_monitor.h"
|
||||
#include "interface.h"
|
||||
#include "script_sound.h"
|
||||
#include "sfall_config.h"
|
||||
#include "sfall_script_hooks.h"
|
||||
#include "worldmap.h"
|
||||
|
||||
@@ -45,7 +46,14 @@ void sfallOnAfterGameStarted()
|
||||
{
|
||||
// Disable Horrigan Patch
|
||||
bool isDisableHorrigan = false;
|
||||
configGetBool(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, "disable_horrigan", &isDisableHorrigan);
|
||||
int value = 0;
|
||||
if (configGetInt(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "DisableHorrigan", &value)) {
|
||||
isDisableHorrigan = value != 0;
|
||||
} else if (!configGetBool(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, "disable_horrigan", &isDisableHorrigan)) {
|
||||
int value = 0;
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, "disable_horrigan", &value, 0);
|
||||
isDisableHorrigan = value != 0;
|
||||
}
|
||||
|
||||
if (isDisableHorrigan) {
|
||||
gDidMeetFrankHorrigan = true;
|
||||
|
||||
+5
-1
@@ -1,5 +1,6 @@
|
||||
#include "version.h"
|
||||
#include "content_config.h"
|
||||
#include "sfall_config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -10,7 +11,10 @@ void versionGetVersion(char* dest, size_t size)
|
||||
{
|
||||
// SFALL: custom version string.
|
||||
char* versionString = nullptr;
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, "version_string", &versionString, "");
|
||||
configGetString(&gSfallConfig, SFALL_CONFIG_MISC_KEY, "VersionString", &versionString, "");
|
||||
if (!*versionString) {
|
||||
configGetString(&gContentConfig, CONTENT_CONFIG_MAIN_MENU_SECTION, "version_string", &versionString, "");
|
||||
}
|
||||
if (!*versionString) {
|
||||
versionString = nullptr;
|
||||
}
|
||||
|
||||
+26
-8
@@ -41,6 +41,7 @@
|
||||
#include "random.h"
|
||||
#include "scripts.h"
|
||||
#include "settings.h"
|
||||
#include "sfall_config.h"
|
||||
#include "sfall_global_scripts.h"
|
||||
#include "skill.h"
|
||||
#include "stat.h"
|
||||
@@ -852,6 +853,23 @@ static FrmImage _townFrmImage;
|
||||
static bool wmFaded = false;
|
||||
static int wmForceEncounterMapId = -1;
|
||||
static unsigned int wmForceEncounterFlags = 0;
|
||||
|
||||
static int worldmapGetSfallIntSetting(const char* key, int defaultValue)
|
||||
{
|
||||
int value = defaultValue;
|
||||
configGetInt(&gSfallConfig, SFALL_CONFIG_MISC_KEY, key, &value);
|
||||
return value;
|
||||
}
|
||||
|
||||
static int worldmapGetIntSetting(const char* contentKey, const char* sfallSection, const char* sfallKey, int defaultValue)
|
||||
{
|
||||
int value = defaultValue;
|
||||
if (configGetInt(&gSfallConfig, sfallSection, sfallKey, &value)) {
|
||||
return value;
|
||||
}
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, contentKey, &value);
|
||||
return value;
|
||||
}
|
||||
static int worldmapTrailMarkers;
|
||||
|
||||
static inline bool cityIsValid(int city)
|
||||
@@ -900,8 +918,8 @@ int wmWorldMap_init()
|
||||
wmWorldMapSaveTempData();
|
||||
|
||||
// SFALL
|
||||
configGetBool(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, "town_map_hotkeys_fix", &gTownMapHotkeysFix, true);
|
||||
configGetInt(&gContentConfig, CONTENT_CONFIG_WORLDMAP_SECTION, "trail_markers", &worldmapTrailMarkers, 0);
|
||||
gTownMapHotkeysFix = worldmapGetIntSetting("town_map_hotkeys_fix", SFALL_CONFIG_MISC_KEY, "TownMapHotkeysFix", 1) != 0;
|
||||
worldmapTrailMarkers = worldmapGetIntSetting("trail_markers", "Interface", "WorldMapTravelMarkers", 0);
|
||||
|
||||
// CE: City size fids should be initialized during startup. They are used
|
||||
// during |wmTeleportToArea| to calculate worldmap position when jumping
|
||||
@@ -922,8 +940,8 @@ static int wmGenDataInit()
|
||||
{
|
||||
gDidMeetFrankHorrigan = false;
|
||||
wmGenData.currentAreaId = -1;
|
||||
wmGenData.worldPosX = 173;
|
||||
wmGenData.worldPosY = 122;
|
||||
wmGenData.worldPosX = worldmapGetSfallIntSetting("StartXPos", 173);
|
||||
wmGenData.worldPosY = worldmapGetSfallIntSetting("StartYPos", 122);
|
||||
wmGenData.currentSubtile = nullptr;
|
||||
wmGenData.dword_672E18 = 0;
|
||||
wmGenData.isWalking = false;
|
||||
@@ -988,8 +1006,8 @@ static int wmGenDataReset()
|
||||
wmGenData.encounterIconIsVisible = false;
|
||||
mousePressed = false;
|
||||
wmGenData.currentAreaId = -1;
|
||||
wmGenData.worldPosX = 173;
|
||||
wmGenData.worldPosY = 122;
|
||||
wmGenData.worldPosX = worldmapGetSfallIntSetting("StartXPos", 173);
|
||||
wmGenData.worldPosY = worldmapGetSfallIntSetting("StartYPos", 122);
|
||||
wmGenData.walkDestinationX = -1;
|
||||
wmGenData.walkDestinationY = -1;
|
||||
wmGenData.encounterMapId = -1;
|
||||
@@ -1079,8 +1097,8 @@ void wmWorldMap_exit()
|
||||
// 0x4BCEF8
|
||||
int wmWorldMap_reset()
|
||||
{
|
||||
wmWorldOffsetX = 0;
|
||||
wmWorldOffsetY = 0;
|
||||
wmWorldOffsetX = worldmapGetSfallIntSetting("ViewXPos", 0);
|
||||
wmWorldOffsetY = worldmapGetSfallIntSetting("ViewYPos", 0);
|
||||
|
||||
// CE: Fix Pathfinder perk.
|
||||
gGameTimeIncRemainder = 0.0;
|
||||
|
||||
Reference in New Issue
Block a user