void CritLoad() { if(!Inited) return; CritStruct* defaultTable=(CritStruct*)_crit_succ_eff; if(mode==1) { char section[16]; dlogr("Setting up critical hit table using CriticalOverrides.ini", DL_CRITICALS); memset(critTable, 0, CritTableSize*sizeof(CritStruct)); for(DWORD critter=0;critter<20;critter++) { for(DWORD part=0;part<9;part++) { for(DWORD crit=0;crit<6;crit++) { sprintf_s(section, "c_%02d_%d_%d", critter, part, crit); int slot1=crit+part*6+critter*9*6; int slot2=crit+part*6+((critter==19)?38:critter)*9*6; for(int i=0;i<7;i++) { critTable[slot2].values[i]=GetPrivateProfileIntA(section, CritNames[i], defaultTable[slot1].values[i], ".\\CriticalOverrides.ini"); #ifdef TRACE char logmsg[256]; if(critTable[slot2].values[i]!=defaultTable[slot1].values[i]) { sprintf_s(logmsg, "Entry %s value %d changed from %d to %d", section, i, defaultTable[slot1].values[i], critTable[slot2].values[i]); dlogr(logmsg, DL_CRITICALS); } #endif } } } } } else { dlogr("Setting up critical hit table using RP fixes", DL_CRITICALS); memcpy(critTable, defaultTable, 6*9*19*sizeof(CritStruct)); memset(&critTable[6*9*19], 0, 6*9*19*sizeof(CritStruct)); memcpy(playerCrit, (void*)_pc_crit_succ_eff, 6*9*sizeof(CritStruct)); if(mode==3) { char buf[32], buf2[32], buf3[32]; for(int critter=0;critter<CritTableCount;critter++) { sprintf_s(buf, "c_%02d", critter); int all; if(!(all=GetPrivateProfileIntA(buf, "Enabled", 0, ".\\CriticalOverrides.ini"))) continue; for(int part=0;part<9;part++) { if(all<2) { sprintf_s(buf2, "Part_%d", part); if(!GetPrivateProfileIntA(buf, buf2, 0, ".\\CriticalOverrides.ini")) continue; } sprintf_s(buf2, "c_%02d_%d", critter, part); for(int crit=0;crit<6;crit++) { int slot=crit+part*6+critter*9*6; for(int i=0;i<7;i++) { sprintf_s(buf3, "e%d_%s", crit, CritNames[i]); critTable[slot].values[i]=GetPrivateProfileIntA(buf2, buf3, critTable[slot].values[i], ".\\CriticalOverrides.ini"); } } } } } } dlogr("Completed critical hit table", DL_CRITICALS); }
static void _stdcall SaveGame2() { char buf[MAX_PATH]; GetSavePath(buf, "gv"); dlog_f("Saving game: %s\r\n", DL_MAIN, buf); DWORD size, unused = 0; HANDLE h = CreateFileA(buf, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0); if (h != INVALID_HANDLE_VALUE) { SaveGlobals(h); WriteFile(h, &unused, 4, &size, 0); unused++; WriteFile(h, &unused, 4, &size, 0); PerksSave(h); SaveArrays(h); CloseHandle(h); } else { dlogr("ERROR creating sfallgv!", DL_MAIN); DisplayConsoleMessage(SaveSfallDataFailMsg); PlaySfx("IISXXXX1"); } GetSavePath(buf, "fs"); h = CreateFileA(buf, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0); if (h != INVALID_HANDLE_VALUE) { FileSystemSave(h); } CloseHandle(h); }
void CritInit() { mode=GetPrivateProfileIntA("Misc", "OverrideCriticalTable", 2, ini); if(mode<0||mode>3) mode=0; if(!mode) return; dlog("Initilizing critical table override.", DL_INIT); critTable=new CritStruct[CritTableSize]; playerCrit=&critTable[6*9*38]; SafeWrite32(0x423F96, (DWORD)playerCrit); SafeWrite32(0x423FB3, (DWORD)critTable); dlog(". ", DL_INIT); if(mode==2 || mode==3) { CritStruct* defaultTable=(CritStruct*)_crit_succ_eff; SetEntry(2,4,1,4,0); SetEntry(2,4,1,5,5216); SetEntry(2,4,1,6,5000); SetEntry(2,4,2,4,0); SetEntry(2,4,2,5,5216); SetEntry(2,4,2,6,5000); SetEntry(2,5,1,4,0); SetEntry(2,5,1,5,5216); SetEntry(2,5,1,6,5000); SetEntry(2,5,2,4,0); SetEntry(2,5,2,5,5216); SetEntry(2,5,2,6,5000); SetEntry(3,5,1,6,5306); SetEntry(4,0,4,2,-1); SetEntry(5,0,4,2,-1); SetEntry(6,4,1,4,2); SetEntry(6,5,1,4,2); SetEntry(6,5,2,6,5608); SetEntry(9,3,3,4,2); SetEntry(13,5,1,4,4); SetEntry(13,5,2,4,4); SetEntry(13,5,3,4,4); SetEntry(13,5,4,4,4); SetEntry(13,5,5,4,4); SetEntry(18,0,0,5,5001); SetEntry(18,0,1,5,5001); SetEntry(18,0,2,5,5001); SetEntry(18,0,3,5,7105); SetEntry(18,0,4,5,7101); SetEntry(18,0,4,6,7104); SetEntry(18,0,5,5,7101); SetEntry(18,1,0,5,5008); SetEntry(18,1,1,5,5008); SetEntry(18,1,2,5,5009); SetEntry(18,1,3,5,5009); SetEntry(18,1,4,5,7102); SetEntry(18,1,5,5,7102); SetEntry(18,2,0,5,5008); SetEntry(18,2,1,5,5008); SetEntry(18,2,2,5,5009); SetEntry(18,2,3,5,5009); SetEntry(18,2,4,5,7102); SetEntry(18,2,5,5,7102); SetEntry(18,3,4,5,7101); SetEntry(18,3,5,5,7101); SetEntry(18,4,0,5,5023); SetEntry(18,4,1,5,7101); SetEntry(18,4,1,6,7103); SetEntry(18,4,2,5,7101); SetEntry(18,4,2,6,7103); SetEntry(18,4,3,5,7103); SetEntry(18,4,4,5,7103); SetEntry(18,4,5,5,7103); SetEntry(18,5,0,5,5023); SetEntry(18,5,1,5,7101); SetEntry(18,5,1,6,7103); SetEntry(18,5,2,5,7101); SetEntry(18,5,2,6,7103); SetEntry(18,5,3,5,7103); SetEntry(18,5,4,5,7103); SetEntry(18,5,5,5,7103); SetEntry(18,6,0,5,5027); SetEntry(18,6,1,5,5027); SetEntry(18,6,2,5,5027); //SetEntry(18,6,2,6,0); SetEntry(18,6,3,5,5027); SetEntry(18,6,4,5,7104); SetEntry(18,6,5,5,7104); SetEntry(18,7,0,5,5033); SetEntry(18,7,1,5,5027); SetEntry(18,7,1,6,7101); SetEntry(18,7,2,5,7101); SetEntry(18,7,3,5,7101); SetEntry(18,7,4,5,7101); SetEntry(18,7,5,5,7101); } Inited=true; dlogr(" Done", DL_INIT); }