Linux tinkerings, moved few offsets and part of creature pattern into memory.xml model
							parent
							
								
									1a99121ead
								
							
						
					
					
						commit
						8e68b50ed7
					
				@ -0,0 +1,57 @@
 | 
			
		||||
onfunction=onfunction or {}
 | 
			
		||||
function onfunction.install()
 | 
			
		||||
	ModData=engine.installMod("dfusion/onfunction/functions.o","functions",4)
 | 
			
		||||
	modpos=ModData.pos
 | 
			
		||||
	modsize=ModData.size
 | 
			
		||||
	onfunction.pos=modpos
 | 
			
		||||
	trgpos=engine.getpushvalue()
 | 
			
		||||
	print(string.format("Function installed in:%x function to call is: %x",modpos,trgpos))
 | 
			
		||||
	local firstpos=modpos+engine.FindMarker(ModData,"function")
 | 
			
		||||
	engine.poked(firstpos,trgpos-firstpos-4) --call Lua-Onfunction
 | 
			
		||||
	onfunction.fpos=modpos+engine.FindMarker(ModData,"function3")
 | 
			
		||||
	engine.poked(modpos+engine.FindMarker(ModData,"function2"),modpos+modsize)
 | 
			
		||||
	engine.poked(onfunction.fpos,modpos+modsize)
 | 
			
		||||
	SetExecute(modpos)
 | 
			
		||||
	onfunction.calls={}
 | 
			
		||||
	onfunction.functions={}
 | 
			
		||||
	onfunction.names={}
 | 
			
		||||
end
 | 
			
		||||
function OnFunction(values)
 | 
			
		||||
	--[=[print("Onfunction called!")
 | 
			
		||||
	print("Data:")
 | 
			
		||||
	for k,v in pairs(values) do
 | 
			
		||||
		print(string.format("%s=%x",k,v))
 | 
			
		||||
	end
 | 
			
		||||
	print("stack:")
 | 
			
		||||
	for i=0,3 do 
 | 
			
		||||
		print(string.format("%d %x",i,engine.peekd(values.esp+i*4)))
 | 
			
		||||
	end
 | 
			
		||||
	--]=]
 | 
			
		||||
	if onfunction.functions[values.ret] ~=nil then
 | 
			
		||||
		onfunction.functions[values.ret](values)
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	return  onfunction.calls[values.ret] --returns real function to call
 | 
			
		||||
end
 | 
			
		||||
function onfunction.patch(addr)
 | 
			
		||||
	
 | 
			
		||||
	if(engine.peekb(addr)~=0xe8) then
 | 
			
		||||
		error("Incorrect address, not a function call")
 | 
			
		||||
	else
 | 
			
		||||
		
 | 
			
		||||
		onfunction.calls[addr+5]=addr+engine.peekd(addr+1)+5 --adds real function to call
 | 
			
		||||
		engine.poked(addr+1,engine.getmod("functions")-addr-5)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
function onfunction.AddFunction(addr,name)
 | 
			
		||||
	onfunction.patch(addr)
 | 
			
		||||
	onfunction.names[name]=addr+5
 | 
			
		||||
end
 | 
			
		||||
function onfunction.SetCallback(name,func)
 | 
			
		||||
	if onfunction.names[name]==nil then
 | 
			
		||||
		error("No such function:"..name)
 | 
			
		||||
	else
 | 
			
		||||
		onfunction.functions[onfunction.names[name]]=func
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue