mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Moved part of AnimationsAtOnceInit code from main.cpp to AnimationsAtOnceLimit.cpp.
Changed the if condition for ProcessorIdle to make sure out-of-bounds values not resulting in unexpected but valid values.
This commit is contained in:
+144
-146
@@ -20,8 +20,7 @@
|
||||
|
||||
#include "AnimationsAtOnceLimit.h"
|
||||
|
||||
|
||||
static bool AniLimitFixActive = false;
|
||||
static int aniMax = 32;
|
||||
|
||||
//pointers to new animation struct arrays
|
||||
static BYTE *anim_set;
|
||||
@@ -143,160 +142,159 @@ static const DWORD sad_28[] = {
|
||||
0x4173CE, 0x4174C1, 0x4175F1, 0x417730,
|
||||
};
|
||||
|
||||
void AnimationsAtOnceInit(signed char aniMax) {
|
||||
void AnimationsAtOnceInit() {
|
||||
aniMax = GetPrivateProfileIntA("Misc", "AnimationsAtOnceLimit", 32, ini);
|
||||
if (aniMax > 32 && aniMax <= 127) {
|
||||
dlog("Applying AnimationsAtOnceLimit patch.", DL_INIT);
|
||||
|
||||
if (aniMax <= 32) return;
|
||||
int i;
|
||||
|
||||
AniLimitFixActive = true;
|
||||
//allocate memory to store larger animation struct arrays
|
||||
anim_set = new BYTE[2656*(aniMax+1)];
|
||||
sad = new BYTE[3240*(aniMax+1)];
|
||||
|
||||
int i;
|
||||
//set general animation limit check (old 20) aniMax-12 -- +12 reserved for PC movement(4) + other critical animations(8)?
|
||||
SafeWrite8(0x413C07, aniMax-12);
|
||||
|
||||
//allocate memory to store larger animation struct arrays
|
||||
anim_set = new BYTE[2656*(aniMax+1)];
|
||||
sad = new BYTE[3240*(aniMax+1)];
|
||||
//PC movement animation limit checks (old 24) aniMax-8 -- +8 reserved for other critical animations?.
|
||||
for (i = 0; i < sizeof(AnimPCMove)/4; i++) {
|
||||
SafeWrite8(AnimPCMove[i], aniMax-8);
|
||||
}
|
||||
|
||||
//set general animation limit check (old 20) aniMax-12 -- +12 reserved for PC movement(4) + other critical animations(8)?
|
||||
SafeWrite8(0x413C07, aniMax-12);
|
||||
//Max animation limit checks (old 32) aniMax
|
||||
for (i = 0; i < sizeof(AnimMaxCheck)/4; i++) {
|
||||
SafeWrite8(AnimMaxCheck[i], aniMax);
|
||||
}
|
||||
|
||||
//PC movement animation limit checks (old 24) aniMax-8 -- +8 reserved for other critical animations?.
|
||||
for (i = 0; i < sizeof(AnimPCMove)/4; i++) {
|
||||
SafeWrite8(AnimPCMove[i], aniMax-8);
|
||||
//Max animations checks - animation struct size * max num of animations (old 2656*32=84992)
|
||||
for (i = 0; i < sizeof(AnimMaxSizeCheck)/4; i++) {
|
||||
SafeWrite32(AnimMaxSizeCheck[i], 2656*aniMax);
|
||||
}
|
||||
|
||||
//divert old animation structure list pointers to newly alocated memory
|
||||
|
||||
//struct array 1///////////////////
|
||||
|
||||
//old addr 0x54C1B4
|
||||
SafeWrite32(0x413A9E, (DWORD)anim_set);
|
||||
|
||||
//old addr 0x54C1C0
|
||||
for (i = 0; i < sizeof(fake_anim_set_C)/4; i++) {
|
||||
SafeWrite32(fake_anim_set_C[i], 12+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC14
|
||||
for (i = 0; i < sizeof(anim_set_0)/4; i++) {
|
||||
SafeWrite32(anim_set_0[i], 2656+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC18
|
||||
for (i = 0; i < sizeof(anim_set_4)/4; i++) {
|
||||
SafeWrite32(anim_set_4[i], 2656+4+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC1C
|
||||
for (i = 0; i < sizeof(anim_set_8)/4; i++) {
|
||||
SafeWrite32(anim_set_8[i], 2656+8+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC20
|
||||
for (i = 0; i < sizeof(anim_set_C)/4; i++) {
|
||||
SafeWrite32(anim_set_C[i], 2656+12+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC24
|
||||
for (i = 0; i < sizeof(anim_set_10)/4; i++) {
|
||||
SafeWrite32(anim_set_10[i], 2656+16+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC28
|
||||
for (i = 0; i < sizeof(anim_set_14)/4; i++) {
|
||||
SafeWrite32(anim_set_14[i], 2656+20+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC38
|
||||
SafeWrite32(0x413F29, 2656+36+(DWORD)anim_set);
|
||||
|
||||
//old addr 0x54CC3C
|
||||
for (i = 0; i < sizeof(anim_set_28)/4; i++) {
|
||||
SafeWrite32(anim_set_28[i], 2656+40+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC48
|
||||
SafeWrite32(0x415C35, 2656+52+(DWORD)anim_set);
|
||||
|
||||
//struct array 2///////////////////
|
||||
|
||||
//old addr 0x530014
|
||||
for (i = 0; i < sizeof(sad_0)/4; i++) {
|
||||
SafeWrite32(sad_0[i], (DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530018
|
||||
for (i = 0; i < sizeof(sad_4)/4; i++) {
|
||||
SafeWrite32(sad_4[i], 4+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x53001C
|
||||
for (i = 0; i < sizeof(sad_8)/4; i++) {
|
||||
SafeWrite32(sad_8[i], 8+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530020
|
||||
for (i = 0; i < sizeof(sad_C)/4; i++) {
|
||||
SafeWrite32(sad_C[i], 12+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530024
|
||||
for (i = 0; i < sizeof(sad_10)/4; i++) {
|
||||
SafeWrite32(sad_10[i], 16+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530028
|
||||
for (i = 0; i < sizeof(sad_14)/4; i++) {
|
||||
SafeWrite32(sad_14[i], 20+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x53002C
|
||||
for (i = 0; i < sizeof(sad_18)/4; i++) {
|
||||
SafeWrite32(sad_18[i], 24+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530030
|
||||
for (i = 0; i < sizeof(sad_1C)/4; i++) {
|
||||
SafeWrite32(sad_1C[i], 28+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530034
|
||||
for (i = 0; i < sizeof(sad_20)/4; i++) {
|
||||
SafeWrite32(sad_20[i], 32+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530038
|
||||
for (i = 0; i < sizeof(sad_24)/4; i++) {
|
||||
SafeWrite32(sad_24[i], 36+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x53003A
|
||||
SafeWrite32(0x416903, 38+(DWORD)sad);
|
||||
|
||||
//old addr 0x53003B
|
||||
for (i = 0; i < sizeof(sad_27)/4; i++) {
|
||||
SafeWrite32(sad_27[i], 39+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x53003C
|
||||
for (i = 0; i < sizeof(sad_28)/4; i++) {
|
||||
SafeWrite32(sad_28[i], 40+(DWORD)sad);
|
||||
}
|
||||
|
||||
dlogr(" Done", DL_INIT);
|
||||
}
|
||||
|
||||
//Max animation limit checks (old 32) aniMax
|
||||
for (i = 0; i < sizeof(AnimMaxCheck)/4; i++) {
|
||||
SafeWrite8(AnimMaxCheck[i], aniMax);
|
||||
}
|
||||
|
||||
//Max animations checks - animation struct size * max num of animations (old 2656*32=84992)
|
||||
for (i = 0; i < sizeof(AnimMaxSizeCheck)/4; i++) {
|
||||
SafeWrite32(AnimMaxSizeCheck[i], 2656*aniMax);
|
||||
}
|
||||
|
||||
|
||||
//divert old animation structure list pointers to newly alocated memory
|
||||
|
||||
//struct array 1///////////////////
|
||||
|
||||
//old addr 0x54C1B4
|
||||
SafeWrite32(0x413A9E, (DWORD)anim_set);
|
||||
|
||||
//old addr 0x54C1C0
|
||||
for (i = 0; i < sizeof(fake_anim_set_C)/4; i++) {
|
||||
SafeWrite32(fake_anim_set_C[i], 12+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC14
|
||||
for (i = 0; i < sizeof(anim_set_0)/4; i++) {
|
||||
SafeWrite32(anim_set_0[i], 2656+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC18
|
||||
for (i = 0; i < sizeof(anim_set_4)/4; i++) {
|
||||
SafeWrite32(anim_set_4[i], 2656+4+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC1C
|
||||
for (i = 0; i < sizeof(anim_set_8)/4; i++) {
|
||||
SafeWrite32(anim_set_8[i], 2656+8+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC20
|
||||
for (i = 0; i < sizeof(anim_set_C)/4; i++) {
|
||||
SafeWrite32(anim_set_C[i], 2656+12+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC24
|
||||
for (i = 0; i < sizeof(anim_set_10)/4; i++) {
|
||||
SafeWrite32(anim_set_10[i], 2656+16+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC28
|
||||
for (i = 0; i < sizeof(anim_set_14)/4; i++) {
|
||||
SafeWrite32(anim_set_14[i], 2656+20+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC38
|
||||
SafeWrite32(0x413F29, 2656+36+(DWORD)anim_set);
|
||||
|
||||
//old addr 0x54CC3C
|
||||
for (i = 0; i < sizeof(anim_set_28)/4; i++) {
|
||||
SafeWrite32(anim_set_28[i], 2656+40+(DWORD)anim_set);
|
||||
}
|
||||
|
||||
//old addr 0x54CC48
|
||||
SafeWrite32(0x415C35, 2656+52+(DWORD)anim_set);
|
||||
|
||||
|
||||
//struct array 2///////////////////
|
||||
|
||||
//old addr 0x530014
|
||||
for (i = 0; i < sizeof(sad_0)/4; i++) {
|
||||
SafeWrite32(sad_0[i], (DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530018
|
||||
for (i = 0; i < sizeof(sad_4)/4; i++) {
|
||||
SafeWrite32(sad_4[i], 4+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x53001C
|
||||
for (i = 0; i < sizeof(sad_8)/4; i++) {
|
||||
SafeWrite32(sad_8[i], 8+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530020
|
||||
for (i = 0; i < sizeof(sad_C)/4; i++) {
|
||||
SafeWrite32(sad_C[i], 12+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530024
|
||||
for (i = 0; i < sizeof(sad_10)/4; i++) {
|
||||
SafeWrite32(sad_10[i], 16+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530028
|
||||
for (i = 0; i < sizeof(sad_14)/4; i++) {
|
||||
SafeWrite32(sad_14[i], 20+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x53002C
|
||||
for (i = 0; i < sizeof(sad_18)/4; i++) {
|
||||
SafeWrite32(sad_18[i], 24+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530030
|
||||
for (i = 0; i < sizeof(sad_1C)/4; i++) {
|
||||
SafeWrite32(sad_1C[i], 28+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530034
|
||||
for (i = 0; i < sizeof(sad_20)/4; i++) {
|
||||
SafeWrite32(sad_20[i], 32+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x530038
|
||||
for (i = 0; i < sizeof(sad_24)/4; i++) {
|
||||
SafeWrite32(sad_24[i], 36+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x53003A
|
||||
SafeWrite32(0x416903, 38+(DWORD)sad);
|
||||
|
||||
//old addr 0x53003B
|
||||
for (i = 0; i < sizeof(sad_27)/4; i++) {
|
||||
SafeWrite32(sad_27[i], 39+(DWORD)sad);
|
||||
}
|
||||
|
||||
//old addr 0x53003C
|
||||
for (i = 0; i < sizeof(sad_28)/4; i++) {
|
||||
SafeWrite32(sad_28[i], 40+(DWORD)sad);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void AnimationsAtOnceExit() {
|
||||
if (!AniLimitFixActive) return;
|
||||
if (aniMax <= 32) return;
|
||||
delete[] anim_set;
|
||||
delete[] sad;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
void AnimationsAtOnceInit(signed char aniMax);
|
||||
void AnimationsAtOnceInit();
|
||||
void AnimationsAtOnceExit();
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ void dlog_f(const char *fmt, int type, ...) {
|
||||
va_list args;
|
||||
va_start(args, type);
|
||||
char buf[4096];
|
||||
vsnprintf_s(buf, sizeof buf, _TRUNCATE, fmt, args);
|
||||
vsnprintf_s(buf, sizeof(buf), _TRUNCATE, fmt, args);
|
||||
Log << buf;
|
||||
Log.flush();
|
||||
va_end(args);
|
||||
|
||||
@@ -244,7 +244,7 @@ public:
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
char msg[1024];
|
||||
vsnprintf_s(msg, sizeof msg, _TRUNCATE, fmt, args);
|
||||
vsnprintf_s(msg, sizeof(msg), _TRUNCATE, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
const char* procName = FindCurrentProc(_program);
|
||||
@@ -391,7 +391,7 @@ static DWORD MotionSensorMode;
|
||||
static BYTE toggleHighlightsKey;
|
||||
static DWORD HighlightContainers;
|
||||
static DWORD Color_Containers;
|
||||
static signed char idle;
|
||||
static int idle;
|
||||
static char HighlightFail1[128];
|
||||
static char HighlightFail2[128];
|
||||
|
||||
@@ -1195,7 +1195,7 @@ void ScriptExtenderSetup() {
|
||||
GetPrivateProfileStringA("Sfall", "HighlightFail2", "Your motion sensor is out of charge.", HighlightFail2, 128, translationIni);
|
||||
|
||||
idle = GetPrivateProfileIntA("Misc", "ProcessorIdle", -1, ini);
|
||||
if (idle > -1) {
|
||||
if (idle > -1 && idle <= 127) {
|
||||
SafeWrite32(_idle_func, (DWORD)Sleep);
|
||||
SafeWrite8(0x4C9F12, 0x6A); // push
|
||||
SafeWrite8(0x4C9F13, idle);
|
||||
@@ -1740,7 +1740,7 @@ void AfterAttackCleanup() {
|
||||
}
|
||||
|
||||
static void RunGlobalScripts1() {
|
||||
if (idle > -1) Sleep(idle);
|
||||
if (idle > -1 && idle <= 127) Sleep(idle);
|
||||
if (toggleHighlightsKey) {
|
||||
//0x48C294 to toggle
|
||||
if (KeyDown(toggleHighlightsKey)) {
|
||||
@@ -1786,7 +1786,7 @@ static void RunGlobalScripts1() {
|
||||
}
|
||||
|
||||
void RunGlobalScripts2() {
|
||||
if (idle > -1) Sleep(idle);
|
||||
if (idle > -1 && idle <= 127) Sleep(idle);
|
||||
for (DWORD d = 0; d < globalScripts.size(); d++) {
|
||||
if (!globalScripts[d].repeat || globalScripts[d].mode != 1) continue;
|
||||
if (++globalScripts[d].count >= globalScripts[d].repeat) {
|
||||
@@ -1796,7 +1796,7 @@ void RunGlobalScripts2() {
|
||||
ResetStateAfterFrame();
|
||||
}
|
||||
void RunGlobalScripts3() {
|
||||
if (idle > -1) Sleep(idle);
|
||||
if (idle > -1 && idle <= 127) Sleep(idle);
|
||||
for (DWORD d = 0; d < globalScripts.size(); d++) {
|
||||
if (!globalScripts[d].repeat || (globalScripts[d].mode != 2 && globalScripts[d].mode != 3)) continue;
|
||||
if (++globalScripts[d].count >= globalScripts[d].repeat) {
|
||||
|
||||
+1
-6
@@ -1378,12 +1378,7 @@ static void DllMain2() {
|
||||
dlogr("Patching out ereg call.", DL_INIT);
|
||||
BlockCall(0x4425E6);
|
||||
|
||||
tmp = GetPrivateProfileIntA("Misc", "AnimationsAtOnceLimit", 32, ini);
|
||||
if ((signed char)tmp > 32) {
|
||||
dlog("Applying AnimationsAtOnceLimit patch.", DL_INIT);
|
||||
AnimationsAtOnceInit((signed char)tmp);
|
||||
dlogr(" Done", DL_INIT);
|
||||
}
|
||||
AnimationsAtOnceInit();
|
||||
|
||||
if (GetPrivateProfileIntA("Misc", "RemoveCriticalTimelimits", 0, ini)) {
|
||||
dlog("Removing critical time limits.", DL_INIT);
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ T SimplePatch(DWORD *addrs, int numAddrs, const char* iniSection, const char* in
|
||||
value = minValue;
|
||||
else if (value > maxValue)
|
||||
value = maxValue;
|
||||
_snprintf_s(msg, sizeof msg, _TRUNCATE, "Applying patch: %s = %d.", iniKey, value);
|
||||
_snprintf_s(msg, sizeof(msg), _TRUNCATE, "Applying patch: %s = %d.", iniKey, value);
|
||||
dlog((const char *)msg, DL_INIT);
|
||||
for (int i=0; i<numAddrs; i++)
|
||||
SafeWrite<T>(addrs[i], (T)value);
|
||||
|
||||
Reference in New Issue
Block a user