mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2025-01-13 07:33:53 +08:00
.
This commit is contained in:
parent
0a77c9ce70
commit
1a7f27bd28
@ -23,7 +23,7 @@ else()
|
|||||||
Syuntada Pensil Anim hibiki Nitroplus Reallive Siglus Taskforce2 RUGP IronGameSystem Anex86
|
Syuntada Pensil Anim hibiki Nitroplus Reallive Siglus Taskforce2 RUGP IronGameSystem Anex86
|
||||||
ShinyDaysGame MarineHeart ShinaRio CaramelBox UnisonShift Escude Ryokucha Alice Footy2
|
ShinyDaysGame MarineHeart ShinaRio CaramelBox UnisonShift Escude Ryokucha Alice Footy2
|
||||||
utawarerumono System4x Abalone Abel 5pb HorkEye XUSE Leaf Nekopack AXL AGS AdobeFlash10
|
utawarerumono System4x Abalone Abel 5pb HorkEye XUSE Leaf Nekopack AXL AGS AdobeFlash10
|
||||||
FocasLens Tamamo Ages3ResT H_do_C)
|
FocasLens Tamamo Ages3ResT H_do_C RScript)
|
||||||
set(enginepath "engine32")
|
set(enginepath "engine32")
|
||||||
set(collector "enginecollection32.cpp")
|
set(collector "enginecollection32.cpp")
|
||||||
endif()
|
endif()
|
||||||
|
@ -4,9 +4,9 @@ namespace{
|
|||||||
bool _1(){
|
bool _1(){
|
||||||
BYTE sig[]={0x64,0xa3,0x00,0x00,0x00,0x00,0x8b,0xf1,0x8b,0x45,0x08,0x0f,0x57,0xc0,0xc7,0x06,0x02,0x00,0x00,0x00};
|
BYTE sig[]={0x64,0xa3,0x00,0x00,0x00,0x00,0x8b,0xf1,0x8b,0x45,0x08,0x0f,0x57,0xc0,0xc7,0x06,0x02,0x00,0x00,0x00};
|
||||||
auto addr=MemDbg::findBytes(sig, sizeof(sig), processStartAddress, processStopAddress);
|
auto addr=MemDbg::findBytes(sig, sizeof(sig), processStartAddress, processStopAddress);
|
||||||
if(addr==0)return 0;
|
if(!addr)return 0;
|
||||||
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
if(addr==0)return 0;
|
if(!addr)return 0;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = CODEC_UTF16|DATA_INDIRECT;
|
hp.type = CODEC_UTF16|DATA_INDIRECT;
|
||||||
@ -18,9 +18,9 @@ namespace{
|
|||||||
bool _2(){
|
bool _2(){
|
||||||
BYTE sig[]={0xb8,0xff,0x00,0x00,0x00,0x66,0x3b,0x06,0x1b,0xc0,0xf7,0xd8,0x40};
|
BYTE sig[]={0xb8,0xff,0x00,0x00,0x00,0x66,0x3b,0x06,0x1b,0xc0,0xf7,0xd8,0x40};
|
||||||
auto addr=MemDbg::findBytes(sig, sizeof(sig), processStartAddress, processStopAddress);
|
auto addr=MemDbg::findBytes(sig, sizeof(sig), processStartAddress, processStopAddress);
|
||||||
if(addr==0)return 0;
|
if(!addr)return 0;
|
||||||
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
if(addr==0)return 0;
|
if(!addr)return 0;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.type = CODEC_UTF16|DATA_INDIRECT|NO_CONTEXT;
|
hp.type = CODEC_UTF16|DATA_INDIRECT|NO_CONTEXT;
|
||||||
@ -35,7 +35,7 @@ namespace{
|
|||||||
DWORD maxaddr=0;int maxi=0;
|
DWORD maxaddr=0;int maxi=0;
|
||||||
for(auto addr:Util::SearchMemory(sig, sizeof(sig),PAGE_EXECUTE, processStartAddress, processStopAddress)){
|
for(auto addr:Util::SearchMemory(sig, sizeof(sig),PAGE_EXECUTE, processStartAddress, processStopAddress)){
|
||||||
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
if(addr==0)continue;
|
if(!addr)continue;
|
||||||
if(mp.find(addr)==mp.end())mp[addr]=0;
|
if(mp.find(addr)==mp.end())mp[addr]=0;
|
||||||
mp[addr]+=1;
|
mp[addr]+=1;
|
||||||
if(mp[addr]>maxi){maxi=mp[addr];maxaddr=addr;}
|
if(mp[addr]>maxi){maxi=mp[addr];maxaddr=addr;}
|
||||||
|
@ -39,7 +39,7 @@ public:
|
|||||||
{
|
{
|
||||||
//[071227][フロントウイング] タイムリープ
|
//[071227][フロントウイング] タイムリープ
|
||||||
check_by = CHECK_BY::FILE_ALL;
|
check_by = CHECK_BY::FILE_ALL;
|
||||||
check_by_target = check_by_list{L"MDT/*.dat", L"BGM.dat", L"CHIP.dat", L"ef.dat", L"Init.dat", L"SE.dat"};
|
check_by_target = check_by_list{L"MDT\\*.dat", L"BGM.dat", L"CHIP.dat", L"ef.dat", L"Init.dat", L"SE.dat"};
|
||||||
};
|
};
|
||||||
bool attach_function();
|
bool attach_function();
|
||||||
};
|
};
|
@ -9,7 +9,7 @@ bool GSX1() {
|
|||||||
//http://www.mirai-soft.com/products/persona/download.html
|
//http://www.mirai-soft.com/products/persona/download.html
|
||||||
//https://dlsoft.dmm.co.jp/detail/stone_0015/
|
//https://dlsoft.dmm.co.jp/detail/stone_0015/
|
||||||
ULONG addr = MemDbg::findCallerAddress((ULONG)::GetCharWidth32W, 0xec8b55, processStartAddress, processStopAddress);
|
ULONG addr = MemDbg::findCallerAddress((ULONG)::GetCharWidth32W, 0xec8b55, processStartAddress, processStopAddress);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address=addr;
|
hp.address=addr;
|
||||||
hp.type=USING_CHAR|CODEC_UTF16|DATA_INDIRECT;
|
hp.type=USING_CHAR|CODEC_UTF16|DATA_INDIRECT;
|
||||||
@ -36,14 +36,14 @@ bool GSX2() {
|
|||||||
//仁義なき乙女 体验版
|
//仁義なき乙女 体验版
|
||||||
//https://dlsoft.dmm.co.jp/detail/stone_0031/
|
//https://dlsoft.dmm.co.jp/detail/stone_0031/
|
||||||
ULONG addr = findiatcallormov((DWORD)GetGlyphOutlineA,processStartAddress, processStartAddress, processStopAddress,false,XX);
|
ULONG addr = findiatcallormov((DWORD)GetGlyphOutlineA,processStartAddress, processStartAddress, processStopAddress,false,XX);
|
||||||
if(addr==0)
|
if(!addr)
|
||||||
addr = findiatcallormov((DWORD)GetGlyphOutlineA,processStartAddress, processStartAddress, processStopAddress);
|
addr = findiatcallormov((DWORD)GetGlyphOutlineA,processStartAddress, processStartAddress, processStopAddress);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
auto addr1=findfuncstart(addr);
|
auto addr1=findfuncstart(addr);
|
||||||
auto addr2=MemDbg::findEnclosingAlignedFunction(addr);
|
auto addr2=MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
if(addr1) addr=addr1;
|
if(addr1) addr=addr1;
|
||||||
else addr=addr2;
|
else addr=addr2;
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
auto xrefs=findxref_reverse_checkcallop(addr,processStartAddress,processStopAddress,0xe8);
|
auto xrefs=findxref_reverse_checkcallop(addr,processStartAddress,processStopAddress,0xe8);
|
||||||
if(xrefs.size()!=2)return false;
|
if(xrefs.size()!=2)return false;
|
||||||
addr=xrefs[1];
|
addr=xrefs[1];
|
||||||
@ -51,7 +51,7 @@ bool GSX2() {
|
|||||||
addr2=MemDbg::findEnclosingAlignedFunction(addr);
|
addr2=MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
if(addr1)addr=addr1;
|
if(addr1)addr=addr1;
|
||||||
else addr=addr2;
|
else addr=addr2;
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
ConsoleOutput("%p",addr);
|
ConsoleOutput("%p",addr);
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address=addr;
|
hp.address=addr;
|
||||||
|
@ -5,9 +5,9 @@ bool HXP::attach_function() {
|
|||||||
//https://vndb.org/v172
|
//https://vndb.org/v172
|
||||||
//エクソダスギルティー・オルタナティブ
|
//エクソダスギルティー・オルタナティブ
|
||||||
auto addr=MemDbg::findCallerAddress((DWORD)TextOutA, 0x01003d66,processStartAddress, processStopAddress);
|
auto addr=MemDbg::findCallerAddress((DWORD)TextOutA, 0x01003d66,processStartAddress, processStopAddress);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = (DWORD)addr;
|
hp.address = (DWORD)addr;
|
||||||
hp.offset=stackoffset(2);
|
hp.offset=stackoffset(2);
|
||||||
|
@ -13,7 +13,7 @@ bool Nijyuei::attach_function() {
|
|||||||
|
|
||||||
};
|
};
|
||||||
auto addr=MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStopAddress);
|
auto addr=MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStopAddress);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
|
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr+5;
|
hp.address = addr+5;
|
||||||
|
80
cpp/LunaHook/LunaHook/engine32/RScript.cpp
Normal file
80
cpp/LunaHook/LunaHook/engine32/RScript.cpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#include "RScript.h"
|
||||||
|
|
||||||
|
bool RScript::attach_function()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
void __thiscall CSelTxtEx::SetSels(CSelTxtEx *this, char *a2)
|
||||||
|
|
||||||
|
while ( *a2 )
|
||||||
|
{
|
||||||
|
if ( _ismbblead(*a2) && (v8 = _ismbbtrail(a2[1])) != 0 )
|
||||||
|
{
|
||||||
|
if ( *((_WORD *)this + 42) >= *((_WORD *)this + 43) )
|
||||||
|
return;
|
||||||
|
LOWORD(v8) = (unsigned __int8)*a2;
|
||||||
|
LOWORD(v9) = (unsigned __int8)a2[1];
|
||||||
|
*(_WORD *)(*((_DWORD *)this + 96) + 2 * *((unsigned __int16 *)this + 42)) = v3;
|
||||||
|
CSelTxtEx::SetSel(this, v9 + (v8 << 8), v23, v4, v22, v21);
|
||||||
|
a2 += 2;
|
||||||
|
}
|
||||||
|
else if ( *a2 == 94 )
|
||||||
|
{
|
||||||
|
v10 = *++a2;
|
||||||
|
if ( !v10 )
|
||||||
|
return;
|
||||||
|
switch ( v10 )
|
||||||
|
{
|
||||||
|
case 'A':
|
||||||
|
case 'a':
|
||||||
|
*/
|
||||||
|
BYTE bytes[] = {
|
||||||
|
0x80, 0x3f, 0x5e,
|
||||||
|
0x0f, 0x85, XX4,
|
||||||
|
0x8a, 0x47, 0x01,
|
||||||
|
0x47, 0x84, 0xc0,
|
||||||
|
0x0f, 0x84, XX4,
|
||||||
|
0x0f, 0xbe, 0xc0,
|
||||||
|
0x83, 0xc0, 0xbf,
|
||||||
|
0x83, 0xf8, 0x32};
|
||||||
|
auto addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStopAddress);
|
||||||
|
if (!addr)
|
||||||
|
return false;
|
||||||
|
auto faddr = MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
|
if (!faddr)
|
||||||
|
return false;
|
||||||
|
BYTE bytes2[] = {
|
||||||
|
0x8a, 0x07,
|
||||||
|
0x84, 0xc0,
|
||||||
|
0x0f, 0x84, XX4,
|
||||||
|
0x0f, 0xbe, 0xd0,
|
||||||
|
0x52,
|
||||||
|
0xe8, XX4, // call __ismbblead
|
||||||
|
0x83, 0xc4, 0x04,
|
||||||
|
0x85, 0xc0,
|
||||||
|
0x74, XX,
|
||||||
|
0x0f, 0xbe, 0x47, 0x01,
|
||||||
|
0x50,
|
||||||
|
0xe8, XX4, // call __ismbbtrail
|
||||||
|
};
|
||||||
|
auto addrX = MemDbg::findBytes(bytes2, sizeof(bytes2), faddr, addr);
|
||||||
|
if (!addrX)
|
||||||
|
return false;
|
||||||
|
static auto __ismbblead = *(int *)(addrX + 2 + 2 + 6 + 3 + 1 + 1) + addrX + 2 + 2 + 6 + 3 + 1 + 5;
|
||||||
|
static auto __ismbbtrail = *(int *)(addrX + sizeof(bytes2) - 4) + addrX + sizeof(bytes2);
|
||||||
|
ConsoleOutput("%p", __ismbblead);
|
||||||
|
ConsoleOutput("%p", __ismbbtrail);
|
||||||
|
HookParam hp;
|
||||||
|
hp.address = faddr;
|
||||||
|
hp.offset = stackoffset(1);
|
||||||
|
hp.type = USING_STRING | EMBED_ABLE | EMBED_AFTER_NEW | EMBED_DYNA_SJIS;
|
||||||
|
hp.embed_hook_font = F_GetGlyphOutlineA | F_GetTextExtentPoint32A;
|
||||||
|
hp.lineSeparator = L"^n";
|
||||||
|
patch_fun = []()
|
||||||
|
{
|
||||||
|
ReplaceFunction((void *)__ismbblead, +[](BYTE b)
|
||||||
|
{ return b != '^'; });
|
||||||
|
ReplaceFunction((void *)__ismbbtrail, +[](BYTE b)
|
||||||
|
{ return b != '^'; });
|
||||||
|
};
|
||||||
|
return NewHook(hp, "RScript");
|
||||||
|
}
|
56
cpp/LunaHook/LunaHook/engine32/RScript.h
Normal file
56
cpp/LunaHook/LunaHook/engine32/RScript.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
FILEVERSION 1,0,0,0
|
||||||
|
PRODUCTVERSION 3,0,0,0
|
||||||
|
FILEFLAGSMASK 0x3F
|
||||||
|
FILEFLAGS 0x0
|
||||||
|
FILEOS VOS_NT_WINDOWS32
|
||||||
|
FILETYPE VFT_APP
|
||||||
|
FILESUBTYPE 0x0
|
||||||
|
{
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
{
|
||||||
|
BLOCK "041104b0"
|
||||||
|
{
|
||||||
|
VALUE "Comments"
|
||||||
|
VALUE "CompanyName", "LiarSoft"
|
||||||
|
VALUE "FileDescription", "RScript"
|
||||||
|
VALUE "FileVersion", "1, 0, 0, 0"
|
||||||
|
VALUE "InternalName", "RScript"
|
||||||
|
VALUE "LegalCopyright", "Copyright (C)LiarSoft 2001"
|
||||||
|
VALUE "LegalTrademarks"
|
||||||
|
VALUE "OriginalFilename", "RScript.exe"
|
||||||
|
VALUE "PrivateBuild"
|
||||||
|
VALUE "ProductName", "WindWing RScript"
|
||||||
|
VALUE "ProductVersion", "3, 0, 0, 0"
|
||||||
|
VALUE "SpecialBuild"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
{
|
||||||
|
VALUE "Translation", 0x411, 1200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
class RScript : public ENGINE
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RScript()
|
||||||
|
{
|
||||||
|
check_by = CHECK_BY::CUSTOM;
|
||||||
|
check_by_target = []()
|
||||||
|
{
|
||||||
|
auto _ = {
|
||||||
|
L"grpe\\*.lim",
|
||||||
|
L"grps\\*.lim",
|
||||||
|
L"grpo\\*.lim",
|
||||||
|
L"scr\\*.gsc",
|
||||||
|
};
|
||||||
|
auto checkfile = std::all_of(_.begin(), _.end(), Util::CheckFile);
|
||||||
|
return checkfile && Util::SearchResourceString(L"RScript");
|
||||||
|
};
|
||||||
|
is_engine_certain = false;
|
||||||
|
};
|
||||||
|
bool attach_function();
|
||||||
|
};
|
@ -7,7 +7,7 @@ bool SRPGStudio::attach_function() {
|
|||||||
auto dll=GetModuleHandleW(L"OLEAUT32.dll");
|
auto dll=GetModuleHandleW(L"OLEAUT32.dll");
|
||||||
if(dll==0)return 0;
|
if(dll==0)return 0;
|
||||||
auto addr=GetProcAddress(dll,"SysAllocString");
|
auto addr=GetProcAddress(dll,"SysAllocString");
|
||||||
if(addr==0)return 0;
|
if(!addr)return 0;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = (DWORD)addr;
|
hp.address = (DWORD)addr;
|
||||||
hp.offset=stackoffset(1);
|
hp.offset=stackoffset(1);
|
||||||
|
@ -11,7 +11,7 @@ bool Speed::attach_function() {
|
|||||||
BYTE sig4[]={ 0xFF,0xD6 };
|
BYTE sig4[]={ 0xFF,0xD6 };
|
||||||
for(auto p:std::vector<std::pair<BYTE*,int>>{{sig1,sizeof(sig1)},{sig2,sizeof(sig2)},{sig3,sizeof(sig3)},{sig4,sizeof(sig4)}}){
|
for(auto p:std::vector<std::pair<BYTE*,int>>{{sig1,sizeof(sig1)},{sig2,sizeof(sig2)},{sig3,sizeof(sig3)},{sig4,sizeof(sig4)}}){
|
||||||
addr=MemDbg::findBytes(p.first, p.second, addr, addr+0x40);
|
addr=MemDbg::findBytes(p.first, p.second, addr, addr+0x40);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
}
|
}
|
||||||
addr = MemDbg::findEnclosingAlignedFunction(addr);
|
addr = MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
if (addr == 0)return false;
|
if (addr == 0)return false;
|
||||||
|
@ -10,7 +10,7 @@ bool TSSystem::attach_function() {
|
|||||||
auto addrs = Util::SearchMemory(bytes, sizeof(bytes), PAGE_EXECUTE, processStartAddress, processStopAddress);
|
auto addrs = Util::SearchMemory(bytes, sizeof(bytes), PAGE_EXECUTE, processStartAddress, processStopAddress);
|
||||||
for (auto addr : addrs) {
|
for (auto addr : addrs) {
|
||||||
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
addr=MemDbg::findEnclosingAlignedFunction(addr);
|
||||||
if(addr==0)continue;
|
if(!addr)continue;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address = addr;
|
hp.address = addr;
|
||||||
hp.offset=stackoffset(1);
|
hp.offset=stackoffset(1);
|
||||||
|
@ -43,9 +43,9 @@ bool ransel::attach_function() {
|
|||||||
0xe8,XX4 //SendMessageA->__imp_SendMessageA
|
0xe8,XX4 //SendMessageA->__imp_SendMessageA
|
||||||
};
|
};
|
||||||
auto addr=MemDbg::findBytes(sig,sizeof(sig),processStartAddress,processStopAddress);
|
auto addr=MemDbg::findBytes(sig,sizeof(sig),processStartAddress,processStopAddress);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
addr=findfuncstart(addr,0x20);
|
addr=findfuncstart(addr,0x20);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
hp.address=addr;
|
hp.address=addr;
|
||||||
hp.type=USING_STRING;
|
hp.type=USING_STRING;
|
||||||
|
@ -92,16 +92,16 @@ namespace{
|
|||||||
BYTE sig4[]={XX,0x00,0x24,0xA0,0xFC};
|
BYTE sig4[]={XX,0x00,0x24,0xA0,0xFC};
|
||||||
|
|
||||||
addr=forwardsearch(sig1,sizeof(sig1),addr,0x20);
|
addr=forwardsearch(sig1,sizeof(sig1),addr,0x20);
|
||||||
if(addr==0)continue;
|
if(!addr)continue;
|
||||||
|
|
||||||
addr=forwardsearch(sig2,sizeof(sig2),addr,0x100);
|
addr=forwardsearch(sig2,sizeof(sig2),addr,0x100);
|
||||||
if(addr==0)continue;
|
if(!addr)continue;
|
||||||
|
|
||||||
addr=forwardsearch(sig3,sizeof(sig3),addr,0x20);
|
addr=forwardsearch(sig3,sizeof(sig3),addr,0x20);
|
||||||
if(addr==0)continue;
|
if(!addr)continue;
|
||||||
|
|
||||||
addr=forwardsearch(sig4,sizeof(sig4),addr,0x20);
|
addr=forwardsearch(sig4,sizeof(sig4),addr,0x20);
|
||||||
if(addr==0)continue;
|
if(!addr)continue;
|
||||||
auto off=andregimm((BYTE*)addrsave);
|
auto off=andregimm((BYTE*)addrsave);
|
||||||
if(off==regs::invalid)continue;
|
if(off==regs::invalid)continue;
|
||||||
HookParam hp;
|
HookParam hp;
|
||||||
@ -164,7 +164,7 @@ namespace{
|
|||||||
char innerHTML[]="innerHTML";
|
char innerHTML[]="innerHTML";
|
||||||
auto addr = MemDbg::findBytes(innerHTML, sizeof(innerHTML), processStartAddress, processStopAddress);
|
auto addr = MemDbg::findBytes(innerHTML, sizeof(innerHTML), processStartAddress, processStopAddress);
|
||||||
ConsoleOutput("%x",addr);
|
ConsoleOutput("%x",addr);
|
||||||
if(addr==0)return false;
|
if(!addr)return false;
|
||||||
bool ok=false;
|
bool ok=false;
|
||||||
for(auto _addr=processStartAddress+4;_addr<processStopAddress;_addr+=1){
|
for(auto _addr=processStartAddress+4;_addr<processStopAddress;_addr+=1){
|
||||||
if((_addr+*(int*)(_addr-4) )==addr){
|
if((_addr+*(int*)(_addr-4) )==addr){
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "engine32/VALKYRIA.h"
|
#include "engine32/VALKYRIA.h"
|
||||||
#include "engine32/Moonstone.h"
|
#include "engine32/Moonstone.h"
|
||||||
#include "engine32/mirage.h"
|
#include "engine32/mirage.h"
|
||||||
|
#include "engine32/RScript.h"
|
||||||
#include "engine32/Sprite.h"
|
#include "engine32/Sprite.h"
|
||||||
#include "engine32/PONScripter.h"
|
#include "engine32/PONScripter.h"
|
||||||
#include "engine32/Stronger.h"
|
#include "engine32/Stronger.h"
|
||||||
@ -431,5 +432,6 @@ std::vector<ENGINE *> check_engines()
|
|||||||
new H_do_C,
|
new H_do_C,
|
||||||
new Mink3,
|
new Mink3,
|
||||||
new FrontWing2,
|
new FrontWing2,
|
||||||
|
new RScript,
|
||||||
};
|
};
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user