void apply() override { if (!config.engineEnhancements) { return; } uiCharInit = reinterpret_cast<UiCharInit>(replaceFunction(0x1014B900, HookedUiCharInit)); }
void apply() override { replaceFunction(0x1005FA00, RumorGivenOut); replaceFunction(0x1005FB70, RumorFind); replaceFunction(0x1006D190, PcStart); replaceFunction(0x100AE1E0, IsPythonScript); replaceFunction(0x100AE210, RunPythonObjScript); replaceFunction(0x100AEDA0, SetAnimatedObject); replaceFunction(0x100AE7A0, RunDialogAction); replaceFunction(0x100AE3F0, RunDialogGuard); }
/** Replace a function with a new one. The old function is deleted. * The new function must have already its workspace set. * @param f_old :: The pointer to the function to replace. If it's not * a member of this composite function nothing happens * @param f_new :: A pointer to the new function */ void CompositeFunction::replaceFunctionPtr(const IFunction_sptr f_old, IFunction_sptr f_new) { std::vector<IFunction_sptr>::const_iterator it = std::find(m_functions.begin(), m_functions.end(), f_old); if (it == m_functions.end()) return; std::vector<IFunction_sptr>::difference_type iFun = it - m_functions.begin(); replaceFunction(iFun, f_new); }
void TextureHooks::apply() { replaceFunction(0x101EE170, UnloadAll); replaceFunction(0x101EE240, UnloadId); replaceFunction(0x101EE270, SetMapTileFilenameResolver); replaceFunction(0x101EE280, GetMapTileArtId); replaceFunction(0x101EE7B0, RegisterUiTexture); replaceFunction(0x101EE8A0, RegisterMdfTexture); replaceFunction(0x101EE990, RegisterFontTexture); replaceFunction(0x101EECA0, LoadTexture); }
void apply() override { replaceFunction(0x10182E80, PcCreationFeatUiPrereqCheckUsercallWrapper); OrgFeatMultiselectSub_101822A0 = (int(__cdecl*)()) replaceFunction(0x101822A0, HookedUsercallFeatMultiselectSub_101822A0); //replaceFunction(0x101634D0, PcPortraitWidgetsInit); replaceFunction(0x10163030, PcPortraitsMainHideAndGet); replaceFunction(0x10163660, PcPortraitsInit); replaceFunction(0x101636E0, PcPortraitsResize); replaceFunction(0x10163410, PcPortraitsExit); replaceFunction(0x10163060, PcPortraitsDisable); replaceFunction(0x10163090, PcPortraitsButtonActivateNext); replaceFunction(0x10163440, PcPortraitsRefresh); orgPcPortraitsMsgFunc = replaceFunction(0x101633A0, PcPortraitsMsgFunc); // 1016312F int writeVal = (int)&pcPortraitWidgIds[-1]; write(0x1016312F + 3, &writeVal, 4); // ui_msg_pc_creation_portraits writeVal = MAX_PC_CREATION_PORTRAITS; write(0x101633B5 + 1, &writeVal, 1); writeVal = (int)&pcPortraitWidgIds; write(0x101633B7 + 1, &writeVal, 4); // ui_render_pc_creation_portraits writeVal = MAX_PC_CREATION_PORTRAITS; write(0x10163279 + 1, &writeVal, 1); writeVal = (int)&pcPortraitWidgIds; write(0x1016327B + 1, &writeVal, 4); writeVal = (int)&pcPortraitsMainId; write(0x101632E6 + 2, &writeVal, 4); write(0x1016337A + 2, &writeVal, 4); writeVal = (int)&pcPortraitBoxRects; write(0x101632F6 + 2, &writeVal, 4); writeVal = (int)&pcPortraitRects; write(0x10163329 + 2, &writeVal, 4); }
void apply() override { OrgD20Init = (int(__cdecl *)(GameSystemConf* conf))replaceFunction(0x1004C8A0, _D20Init); replaceFunction(0x1004CA00, _D20StatusInitItemConditions); replaceFunction(0x1004CC00, _D20Query); replaceFunction(0x1004CC60, _d20QueryWithData); replaceFunction(0x1004CD40, _d20QueryReturnData); replaceFunction(0x1004DFC0, _GetAttackWeapon); replaceFunction(0x1004E6B0, _d20SendSignal); replaceFunction(0x1004F910, _D20StatusInitFromInternalFields); replaceFunction(0x1004FDB0, _D20StatusInit); replaceFunction(0x1004FF30, _D20StatusRefresh); replaceFunction(0x10077850, D20SpellDataExtractInfo); replaceFunction(0x10077830, D20SpellDataSetSpontCast); replaceFunction(0x10077800, _d20ActnSetSpellData); replaceFunction(0x10080220, _CanLevelup); replaceFunction(0x10089F80, _globD20aSetTypeAndData1); replaceFunction(0x1008A450, _GlobD20ActnSetSpellData); replaceFunction(0x1008A530, _globD20aSetPerformer); replaceFunction(0x1008CE30, _PerformStandardAttack); replaceFunction(0x100920B0, PerformActivateReadiedAction); replaceFunction(0x100949E0, _GlobD20ActnInit); replaceFunction(0x10093810, _D20ActnInitUsercallWrapper); // function takes esi as argument replaceFunction(0x100FD2D0, _D20StatusInitFeats); replaceFunction(0x100FD790, _D20StatusInitRace); replaceFunction(0x100FEE60, _D20StatusInitClass); }
int main(int argc, char* argv[]) { lua_State* L; const char *destfile, *destnum, *srcfile, *srcnum; Proto *fdestroot, *fsrcroot, *fparent, *fdest, *fsrc; int cdest, csrc; char *realdestnum = NULL, *realsrcnum = NULL; FILE* D; int diff, i; gargc = argc; gargv = argv; i = doargs(argc,argv); argc -= i; argv += i; if (printfuncnum && argc < 1) { usage("need 1 arguments for -pn at least", NULL); } if (argc < 4) { usage("need 4 arguments at least", NULL); } L = lua_open(); glstate = L; luaB_opentests(L); destfile = argv[0]; destnum = argv[1]; if (luaL_loadfile(L, destfile) != 0) { fatal(lua_tostring(L, -1)); } fdestroot = toproto(L, -1); if (printfuncnum) { printf("%d\n",0); printFuncStructure(fdestroot, " 0_"); lua_close(L); return EXIT_SUCCESS; } realdestnum = (char*)calloc(strlen(destnum)+1, sizeof(char)); fparent = findParentFunction(fdestroot, destnum, &cdest, realdestnum); if (cdest < 0) { if (realdestnum) { free(realdestnum); realdestnum = NULL; } fatal("cannot find dest function"); } if (fparent == NULL) { fdest = fdestroot; } else { fdest = fparent->p[cdest]; } srcfile = argv[2]; srcnum = argv[3]; if (luaL_loadfile(L, srcfile) != 0) { fatal(lua_tostring(L, -1)); } fsrcroot = toproto(L, -1); realsrcnum = (char*)calloc(strlen(srcnum)+1, sizeof(char)); fsrc = findParentFunction(fsrcroot, srcnum, &csrc, realsrcnum); if (csrc < 0) { if (realdestnum) { free(realdestnum); realdestnum = NULL; } if (realsrcnum) { free(realsrcnum); realsrcnum = NULL; } fatal("cannot find src function"); } if (fsrc == NULL) { fsrc = fsrcroot; } else { fsrc = fsrc->p[csrc]; } if (!replace_sub){ if (fparent == NULL) { if (realdestnum) { free(realdestnum); realdestnum = NULL; } if (realsrcnum) { free(realsrcnum); realsrcnum = NULL; } fatal("cannot use root as dest function"); } fprintf(stderr, "Replacing %s %s with %s %s ...\n", destfile, realdestnum, srcfile, realsrcnum); diff = replaceFunction(fparent, cdest, fsrc); fprintf(stderr, "1 function replaced ok.\n"); } else { fprintf(stderr, "Replacing sub functions of %s %s with those of %s %s ...\n", destfile, realdestnum, srcfile, realsrcnum); diff = replaceSubFunctions(fdest, fsrc); fprintf(stderr, "%d function replaced ok.", MIN(fdest->sizep, fsrc->sizep)); if (fdest->sizep != fsrc->sizep) { fprintf(stderr, " The dest has %d sub functions, but the src has %d . Please have a check.\n", fdest->sizep, fsrc->sizep); } else { fprintf(stderr, "\n"); } } if (realdestnum) { free(realdestnum); realdestnum = NULL; } if (realsrcnum) { free(realsrcnum); realsrcnum = NULL; } if (strict == 1 && diff > 0){ fatal("strip mode on and incompatible functions found, stop writing output."); } D = (output == NULL) ? stdout : fopen(output, "wb"); if (D == NULL) cannot("open"); lua_lock(L); luaU_dump(L, fdestroot, writer, D, 0); lua_unlock(L); if (ferror(D)) cannot("write"); if (fclose(D)) cannot("close"); printf("%s generated!\n", output); lua_close(L); return EXIT_SUCCESS; }
void apply() override { replaceFunction(0x100C0180, SpellTrigger); replaceFunction(0x100C0390, SpellTriggerProjectile); replaceFunction(0x100BEB80, UpdatePythonSpell); replaceFunction(0x100BEAF0, RemovePythonSpell); }
void apply() override { replaceFunction(0x10045850, UpdateSleepStatus); replaceFunction(0x10046030, RandomEncounterCreate); replaceFunction(0x100461E0, RandomEncounterExists); }
void apply() override { logger->info("Replacing basic Dispatcher functions"); replaceFunction(0x1004D700, _DispIoCheckIoType1); replaceFunction(0x1004D720, _DispIoCheckIoType2); replaceFunction(0x1004D760, _DispIoCheckIoType4); replaceFunction(0x1004D780, _DispIoCheckIoType5); replaceFunction(0x1004D7A0, _DispIoCheckIoType6); replaceFunction(0x1004D7C0, _DispIoCheckIoType7); replaceFunction(0x1004D7E0, _DispIoCheckIoType8); replaceFunction(0x1004D800, _DispIoCheckIoType9); replaceFunction(0x1004D820, _DispIoCheckIoType10); replaceFunction(0x1004D840, _DispIoCheckIoType11); replaceFunction(0x1004D860, _DispIoCheckIoType12); replaceFunction(0x1004D8A0, _DispIoCheckIoType14); replaceFunction(0x1004F780, _PackDispatcherIntoObjFields); replaceFunction(0x100E1E30, _DispatcherRemoveSubDispNodes); replaceFunction(0x100E2400, _DispatcherClearField); replaceFunction(0x100E2720, _DispatcherClearPermanentMods); replaceFunction(0x100E2740, _DispatcherClearItemConds); replaceFunction(0x100E2760, _DispatcherClearConds); replaceFunction(0x100E2120, _DispatcherProcessor); replaceFunction(0x100E1F10, _DispatcherInit); replaceFunction(0x1004DBA0, DispIOType21Init); replaceFunction(0x1004D3A0, _Dispatch62); replaceFunction(0x1004D440, _Dispatch63); replaceFunction(0x1004DEC0, _DispatchAttackBonus); replaceFunction(0x1004E040, _DispatchDamage); replaceFunction(0x1004E790, _dispatchTurnBasedStatusInit); replaceFunction(0x1004ED70, _dispatch1ESkillLevel); }
void apply() override { replaceFunction(0x100EBAA0, EncumberedMoveSpeedCallback); }
void apply() override { replaceFunction(0x100EA5C0, BardicInspiredCourageInitArgs); }
void apply() override { OrgFragarachAnswering = (uint32_t(__cdecl*)(DispatcherCallbackArgs)) replaceFunction(0x10104330, HookedFragarachAnswering); }
void SectorLoadLightFix::apply() { OrgReadLightFromDiff = replaceFunction(0x100A8050, ReadLightFromDiff); OrgReadLight = replaceFunction(0x100A6890, ReadLight); }
void KeyboardFix::apply() { replaceFunction(0x101DE050, IsKeyPressed); replaceFunction(0x101DE070, IsModifierActive); replaceFunction(0x101DE0D0, Update); }