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);
}
Example #4
0
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);

}
Example #5
0
	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);

		
		
	}
Example #6
0
	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); 
		
	}
Example #7
0
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);
	}
Example #10
0
	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); 
		
 
	}
Example #11
0
	void apply() override {
		replaceFunction(0x100EBAA0, EncumberedMoveSpeedCallback);
	}
Example #12
0
	void apply() override
	{
		replaceFunction(0x100EA5C0, BardicInspiredCourageInitArgs);
	}
Example #13
0
	void apply() override {
		OrgFragarachAnswering = (uint32_t(__cdecl*)(DispatcherCallbackArgs)) replaceFunction(0x10104330, HookedFragarachAnswering);

	}
Example #14
0
void SectorLoadLightFix::apply() {
	OrgReadLightFromDiff = replaceFunction(0x100A8050, ReadLightFromDiff);
	OrgReadLight = replaceFunction(0x100A6890, ReadLight);

}
Example #15
0
void KeyboardFix::apply() {
	replaceFunction(0x101DE050, IsKeyPressed);
	replaceFunction(0x101DE070, IsModifierActive);
	replaceFunction(0x101DE0D0, Update);
}