mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Added DataLoadOrderPatch option to use a modified data load order for the engine to find game data (from Crafty's mod)
Updated version number.
This commit is contained in:
+8
-3
@@ -1,5 +1,5 @@
|
|||||||
;sfall configuration settings
|
;sfall configuration settings
|
||||||
;v3.7.3
|
;v3.7.4
|
||||||
|
|
||||||
[Main]
|
[Main]
|
||||||
;Change to 1 if you want to use command line args to tell sfall to use another ini file.
|
;Change to 1 if you want to use command line args to tell sfall to use another ini file.
|
||||||
@@ -201,10 +201,15 @@ WorldMapSlots=0
|
|||||||
;To use a patch file other than patch000.dat, uncomment the next line and add your new file name
|
;To use a patch file other than patch000.dat, uncomment the next line and add your new file name
|
||||||
;If you want to check for multiple patch files, you can include a %d in the file name (sprintf syntax)
|
;If you want to check for multiple patch files, you can include a %d in the file name (sprintf syntax)
|
||||||
;By default, only the first patch file found will be used.
|
;By default, only the first patch file found will be used.
|
||||||
;If you want to load multiple patch files at once, uncomment the MultiPatches line and set it to 1
|
;If you want to load multiple patch files (up to 1000) at once, uncomment the MultiPatches line and set it to 1
|
||||||
;PatchFile=patch%03d.dat
|
;PatchFile=patch%03d.dat
|
||||||
;MultiPatches=0
|
;MultiPatches=0
|
||||||
|
|
||||||
|
;Set to 1 to enable the modified data load order for the engine to find game data
|
||||||
|
;Original: patchXXX.dat > critter_patches > critter_dat > f2_res_patches > f2_res_dat > master_patches > master_dat
|
||||||
|
;Modified: master_patches > critter_patches > patchXXX.dat > critter_dat > f2_res_patches > f2_res_dat > master_dat
|
||||||
|
DataLoadOrderPatch=0
|
||||||
|
|
||||||
;To change the default and starting player models, uncomment the next four lines.
|
;To change the default and starting player models, uncomment the next four lines.
|
||||||
;The default models can also be changed ingame via script
|
;The default models can also be changed ingame via script
|
||||||
;MaleStartModel=hmwarr
|
;MaleStartModel=hmwarr
|
||||||
@@ -477,7 +482,7 @@ QuickPocketsApCostReduction=2
|
|||||||
;Set to 1 to allow objects seeing through other objects with their ShootThru flag set
|
;Set to 1 to allow objects seeing through other objects with their ShootThru flag set
|
||||||
ObjCanSeeObj_ShootThru_Fix=0
|
ObjCanSeeObj_ShootThru_Fix=0
|
||||||
|
|
||||||
;Set to 1 to use the balanced bullet distribution formula for burst attacks
|
;Set to 1 to enable the balanced bullet distribution formula for burst attacks
|
||||||
ComputeSprayMod=1
|
ComputeSprayMod=1
|
||||||
|
|
||||||
;These options modify the bullet distribution of burst attacks if ComputeSprayMod is 1
|
;These options modify the bullet distribution of burst attacks if ComputeSprayMod is 1
|
||||||
|
|||||||
@@ -375,6 +375,7 @@ const DWORD stat_pc_add_experience_ = 0x4AFAA8;
|
|||||||
const DWORD stat_pc_get_ = 0x4AF8FC;
|
const DWORD stat_pc_get_ = 0x4AF8FC;
|
||||||
const DWORD stat_pc_set_ = 0x4AF910;
|
const DWORD stat_pc_set_ = 0x4AF910;
|
||||||
const DWORD stat_set_bonus_ = 0x4AF63C;
|
const DWORD stat_set_bonus_ = 0x4AF63C;
|
||||||
|
const DWORD stricmp_ = 0x4DECE6;
|
||||||
const DWORD strncpy_ = 0x4F014F;
|
const DWORD strncpy_ = 0x4F014F;
|
||||||
const DWORD switch_hand_ = 0x4714E0;
|
const DWORD switch_hand_ = 0x4714E0;
|
||||||
const DWORD talk_to_translucent_trans_buf_to_buf_ = 0x44AC68;
|
const DWORD talk_to_translucent_trans_buf_to_buf_ = 0x44AC68;
|
||||||
@@ -419,6 +420,7 @@ const DWORD xfread_ = 0x4DF44C;
|
|||||||
const DWORD xfseek_ = 0x4DF5D8;
|
const DWORD xfseek_ = 0x4DF5D8;
|
||||||
const DWORD xftell_ = 0x4DF690;
|
const DWORD xftell_ = 0x4DF690;
|
||||||
const DWORD xfwrite_ = 0x4DF4E8;
|
const DWORD xfwrite_ = 0x4DF4E8;
|
||||||
|
const DWORD xremovepath_ = 0x4DFAB4;
|
||||||
const DWORD xrewind_ = 0x4DF6E4;
|
const DWORD xrewind_ = 0x4DF6E4;
|
||||||
const DWORD xungetc_ = 0x4DF3F4;
|
const DWORD xungetc_ = 0x4DF3F4;
|
||||||
const DWORD xvfprintf_ = 0x4DF1AC;
|
const DWORD xvfprintf_ = 0x4DF1AC;
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
#define _combat_turn_running 0x51093C
|
#define _combat_turn_running 0x51093C
|
||||||
#define _combatNumTurns 0x510940
|
#define _combatNumTurns 0x510940
|
||||||
#define _crit_succ_eff 0x510978
|
#define _crit_succ_eff 0x510978
|
||||||
|
#define _critter_db_handle 0x58E94C
|
||||||
#define _critterClearObj 0x518438
|
#define _critterClearObj 0x518438
|
||||||
#define _crnt_func 0x664508
|
#define _crnt_func 0x664508
|
||||||
#define _curr_font_num 0x51E3B0
|
#define _curr_font_num 0x51E3B0
|
||||||
@@ -113,6 +114,7 @@
|
|||||||
#define _main_window 0x5194F0
|
#define _main_window 0x5194F0
|
||||||
#define _map_elevation 0x519578
|
#define _map_elevation 0x519578
|
||||||
#define _map_global_vars 0x51956C
|
#define _map_global_vars 0x51956C
|
||||||
|
#define _master_db_handle 0x58E948
|
||||||
#define _max 0x56FB50
|
#define _max 0x56FB50
|
||||||
#define _Meet_Frank_Horrigan 0x672E04
|
#define _Meet_Frank_Horrigan 0x672E04
|
||||||
#define _mouse_hotx 0x6AC7D0
|
#define _mouse_hotx 0x6AC7D0
|
||||||
@@ -539,6 +541,7 @@ extern const DWORD stat_pc_add_experience_;
|
|||||||
extern const DWORD stat_pc_get_;
|
extern const DWORD stat_pc_get_;
|
||||||
extern const DWORD stat_pc_set_;
|
extern const DWORD stat_pc_set_;
|
||||||
extern const DWORD stat_set_bonus_;
|
extern const DWORD stat_set_bonus_;
|
||||||
|
extern const DWORD stricmp_;
|
||||||
extern const DWORD strncpy_;
|
extern const DWORD strncpy_;
|
||||||
extern const DWORD switch_hand_;
|
extern const DWORD switch_hand_;
|
||||||
extern const DWORD talk_to_translucent_trans_buf_to_buf_;
|
extern const DWORD talk_to_translucent_trans_buf_to_buf_;
|
||||||
@@ -583,6 +586,7 @@ extern const DWORD xfread_;
|
|||||||
extern const DWORD xfseek_;
|
extern const DWORD xfseek_;
|
||||||
extern const DWORD xftell_;
|
extern const DWORD xftell_;
|
||||||
extern const DWORD xfwrite_;
|
extern const DWORD xfwrite_;
|
||||||
|
extern const DWORD xremovepath_;
|
||||||
extern const DWORD xrewind_;
|
extern const DWORD xrewind_;
|
||||||
extern const DWORD xungetc_;
|
extern const DWORD xungetc_;
|
||||||
extern const DWORD xvfprintf_;
|
extern const DWORD xvfprintf_;
|
||||||
|
|||||||
+1
-3
@@ -170,9 +170,7 @@ void _stdcall SetShaderMode(DWORD d, DWORD mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int _stdcall LoadShader(const char* path) {
|
int _stdcall LoadShader(const char* path) {
|
||||||
if(GraphicsMode < 4) return -1;
|
if ((GraphicsMode < 4) || (strstr(path, "..")) || (strstr(path, ":"))) return -1;
|
||||||
if(strstr(path, "..")) return -1;
|
|
||||||
if(strstr(path, ":")) return -1;
|
|
||||||
char buf[MAX_PATH];
|
char buf[MAX_PATH];
|
||||||
sprintf(buf, "%s\\shaders\\%s", *(char**)_patches, path);
|
sprintf(buf, "%s\\shaders\\%s", *(char**)_patches, path);
|
||||||
for(DWORD d=0;d<shaders.size();d++) {
|
for(DWORD d=0;d<shaders.size();d++) {
|
||||||
|
|||||||
@@ -417,6 +417,74 @@ c15:
|
|||||||
jmp art_get_code_;
|
jmp art_get_code_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __declspec(naked) removeDatabase() {
|
||||||
|
__asm {
|
||||||
|
cmp eax, -1
|
||||||
|
je end
|
||||||
|
mov ebx, ds:[_paths]
|
||||||
|
mov ecx, ebx
|
||||||
|
nextPath:
|
||||||
|
mov edx, [esp+0x104+4+4] // path_patches
|
||||||
|
mov eax, [ebx+0x0] // database.path
|
||||||
|
call stricmp_
|
||||||
|
test eax, eax // found path?
|
||||||
|
jz skip // Yes
|
||||||
|
mov ecx, ebx
|
||||||
|
mov ebx, [ebx+0xC] // database.next
|
||||||
|
jmp nextPath
|
||||||
|
skip:
|
||||||
|
mov eax, [ebx+0xC] // database.next
|
||||||
|
mov [ecx+0xC], eax // database.next
|
||||||
|
xchg ebx, eax
|
||||||
|
cmp eax, ecx
|
||||||
|
jne end
|
||||||
|
mov ds:[_paths], ebx
|
||||||
|
end:
|
||||||
|
retn
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __declspec(naked) game_init_databases_hack1() {
|
||||||
|
__asm {
|
||||||
|
call removeDatabase
|
||||||
|
mov ds:[_master_db_handle], eax
|
||||||
|
retn
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __declspec(naked) game_init_databases_hack2() {
|
||||||
|
__asm {
|
||||||
|
cmp eax, -1
|
||||||
|
je end
|
||||||
|
mov eax, ds:[_master_db_handle]
|
||||||
|
mov eax, [eax+0x0] // eax = master_patches.path
|
||||||
|
call xremovepath_
|
||||||
|
dec eax // remove path (critter_patches == master_patches)?
|
||||||
|
jz end // Yes
|
||||||
|
inc eax
|
||||||
|
call removeDatabase
|
||||||
|
end:
|
||||||
|
mov ds:[_critter_db_handle], eax
|
||||||
|
retn
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __declspec(naked) game_init_databases_hook() {
|
||||||
|
// eax = _master_db_handle
|
||||||
|
__asm {
|
||||||
|
mov ecx, ds:[_critter_db_handle]
|
||||||
|
mov edx, ds:[_paths]
|
||||||
|
jecxz skip
|
||||||
|
mov [ecx+0xC], edx // critter_patches.next->_paths
|
||||||
|
mov edx, ecx
|
||||||
|
skip:
|
||||||
|
mov [eax+0xC], edx // master_patches.next
|
||||||
|
mov ds:[_paths], eax
|
||||||
|
retn
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static char KarmaGainMsg[128];
|
static char KarmaGainMsg[128];
|
||||||
static char KarmaLossMsg[128];
|
static char KarmaLossMsg[128];
|
||||||
static void _stdcall SetKarma(int value) {
|
static void _stdcall SetKarma(int value) {
|
||||||
@@ -1215,6 +1283,15 @@ static void DllMain2() {
|
|||||||
dlogr(" Done", DL_INIT);
|
dlogr(" Done", DL_INIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GetPrivateProfileIntA("Misc", "DataLoadOrderPatch", 0, ini)) {
|
||||||
|
dlog("Applying data load order patch.", DL_INIT);
|
||||||
|
MakeCall(0x444259, &game_init_databases_hack1, false);
|
||||||
|
MakeCall(0x4442F1, &game_init_databases_hack2, false);
|
||||||
|
HookCall(0x44436D, &game_init_databases_hook);
|
||||||
|
SafeWrite8(0x4DFAEC, 0x1D); // error correction
|
||||||
|
dlogr(" Done", DL_INIT);
|
||||||
|
}
|
||||||
|
|
||||||
if(GetPrivateProfileInt("Misc", "DisplayKarmaChanges", 0, ini)) {
|
if(GetPrivateProfileInt("Misc", "DisplayKarmaChanges", 0, ini)) {
|
||||||
dlog("Applying display karma changes patch.", DL_INIT);
|
dlog("Applying display karma changes patch.", DL_INIT);
|
||||||
GetPrivateProfileString("sfall", "KarmaGain", "You gained %d karma.", KarmaGainMsg, 128, translationIni);
|
GetPrivateProfileString("sfall", "KarmaGain", "You gained %d karma.", KarmaGainMsg, 128, translationIni);
|
||||||
|
|||||||
+3
-3
@@ -22,12 +22,12 @@
|
|||||||
|
|
||||||
#define VERSION_MAJOR 3
|
#define VERSION_MAJOR 3
|
||||||
#define VERSION_MINOR 7
|
#define VERSION_MINOR 7
|
||||||
#define VERSION_BUILD 3
|
#define VERSION_BUILD 4
|
||||||
#define VERSION_REV 0
|
#define VERSION_REV 0
|
||||||
#ifdef WIN2K
|
#ifdef WIN2K
|
||||||
#define VERSION_STRING "3.7.3 win2k"
|
#define VERSION_STRING "3.7.4 win2k"
|
||||||
#else
|
#else
|
||||||
#define VERSION_STRING "3.7.3"
|
#define VERSION_STRING "3.7.4"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CHECK_VAL (4)
|
#define CHECK_VAL (4)
|
||||||
|
|||||||
Reference in New Issue
Block a user