forked from ReScrap/ScrapHacks
Daniel Seiller
3a9ab54240
Clean up DLL-Injector code Fix Crash in DX8 EndScene Hook Update Hook.c to change whole page protection instead of first few bytes Add Hashtable parser and dumper Add keyboard shortcut to toggle DX8 overlay Add VMT Hooking (currently not working) Add Cleanup function that gets called on DLL-Unload
3.6 KiB
3.6 KiB
Infos
- Engine: ScrapEngine
- Ingame Scripting Language: Python 1.5.2
Functions identified:
Ingame-Console (Ctrl+^ or right click on titlebar and select "switch console") (Handler@0x402190):
<Command>
: Try to evaluate Command as Python expression:<Var>
: Get Game Engine Global Variable:<Var> <Val>
: Set Game Engine Global Variable?
: Show all Global Variable?<String>
: Show all Global Variable matching/<command>
: Run Command defined in QuickConsole.py(c) 'import quickconsole;quickconsole.%s()'/<command> <arg>,<arg>
: Run function in QuickConsole.py(c) with argument(s) 'import quickconsole;quickconsole.%s(%s)'
External Console (Scenegraph Debugging?) (Handler@0x5f9520):
listar luces
listar
arbol
(Patch Scrap.exe@offset 0x314bc9 replace 0x20 with 0x00 (or just typearbol
with the space at the end))mem
ver uniones
- Easter Eggs:
imbecil
idiota
capullo
Python Stuff
- Modules List @ 0x79C698 (Module Name as
char*
followed by Pointer to Init Function) - InitPyMod @ 0x5A8FB0
- PyExec @ 0x5A8390
Other Functions:
- FindEntity @ 0x404a50
- HashTable hashfunc @ 0x404bb0
- Register C Callback @ 0x404460
- Load Game @ 0x417470
- File opening functions @ 0x5e3800 and 0x419950
- Scrap_Debug_Init @ 0x403370
- Scrap_Init @ 0x401770
- Scrap_InitPy @ 0x4026d0
- Scrap_OpenPak @ 0x41ab50
- PyExec @ 0x5a8390
- Setup_Game_Var @ 0x414570
- Throw_Assertion @ 0x5fbc50
- m3d.ini loader @ 0x5f7000
- SM3 Scene Loader @ 0x650f80 (?)
- M3D Model Loader @ 0x6665a0 (??)
- World_Init @ 0x479b20 (???)
Data Structures
Game World/State Pointer @ 0x7fe944
Points to GameState struct
Offset | Type | Description |
---|---|---|
0x0 | void** | Virtual Method Table |
0x4 | uint32_t | Size of Entity Hashtable |
0x8 | void** | Pointer to Entity Hashtable |
0x330 | float[3] | Time (why 3 times?) |
0x1c6c | float | Alarm level |
0x1C68 | float | Alarm Grow Level |
Entity Hash Table
Hashfunction used: PJW (Same parameters as the example implementation)
Entry format:
Offset | Type | Description |
---|---|---|
0x0 | void* | Pointer to data |
0x4 | const char* | key as string |
0x8 | void* | Pointer to next entry in chain |
Data format:
Offset | Type | Description |
---|---|---|
0x0 | void** | Virtual Method Table |
0x4 | const char* | name as string |
0x14 | void* | pointer to self |
0x28 | float[3] | Position |
File Formats
*.packed File Format:
Header:
"BFPK\0\0\0\0"
Int32ul: number of files
for each file:
Int32ul: path length
String: path
Int32ul: size
Int32ul: offset in file
Loading Custom Content (not really working)
- Create a folder
mods
- Drop a
*.packed
file into it
Interesting file:
- m3d.ini: Rendering Engine Configuration
- scripts/: Game Engine Scripts
How to enable External Console:
- exctract
Data.packed
- in m3d.ini uncomment (remove
;
) "ConsolaWnd" (GUI Console) or "ConsolaTxt" (Text Console) and set the value to "SI" - repack "Data.packed"
or right click on the title bar (in windowed mode) and click "Switch Console"
or Use a custom Content Pack (untested!)
Misc. Interesting things
- sys.path contains "./lib" so you can load your own Python Modules