vault backup: 2023-02-04 14:56:18

This commit is contained in:
Daniel S. 2023-02-04 14:56:18 +01:00
parent 51d39cbbe4
commit 65f5a81960
20 changed files with 97213 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.obsidian

1
Appendix.md Normal file
View file

@ -0,0 +1 @@
# Appendix

140
Chunked.md Normal file
View file

@ -0,0 +1,140 @@
# Chunked Formats
# General Block format
```cpp
struct Block {
unsigned char block_id[4],
uint32_t size,
unsigned char data[size],
}
template<typename T>
struct Block {
unsigned char block_id[4],
uint32_t size,
T data,
}
```
# Block IDs
File ID | Chunk IDs
------- | ------------------------------------------------------------------------------
AMC | AMC, CMSH, QUAD
CM3 | ANI, CM3, EVA, NAE, NAM, SCN
DUM | DUM, INI
EMI | EMI, LFVF, MAP, MAT, TRI
SM3 | ANI, CAM, INI, LFVF, LUZ, MAP, MAT, MD3D, NAE, NAM, PORT, SCN, SM3, SPR3, SUEL
Read types:
- `i`: 4-byte unsigned integer
- `s`: 4-byte signed integer
- `p`: length prefixed string
- `f`: 4-byte float
- `3f`: array of 3 4-byte floats
- `3i`: array of 3 4-byte unsigned integers
Chunk ID | Description | Reads
-------- | --------------------------- | ------------------------
AMC | Collision Data |
ANI | Animation data? |
CAM | Camera info? |
CMSH | Collision Mesh Data |
DUM | Dummy (map object) data |
INI | INI-Configuration data |
LFVF | FVF Vertex Data |
LUZ | Lighting information |
MAP | UV Map? |
MAT | Material information |
NAE | Animation Data? |
NAM | Animation Data? |
PORT | Map portals? | i==1, i, i, 4, 4
QUAD | Mesh data? |
SCN | Scene data? |
SUEL | Ground plane? | 0x18, 0xc, 4, 4, 4, 0x18
TRI | Triangle strip definitions? |
MD3D | 3D Model definition? |
# Format of Specific chunks
## INI
Configuration Data
```cpp
struct INI {
uint32_t num_sections;
struct {
uint32_t num_lines;
struct {
uint32_t num_chars;
char line[num_chars]
} lines[num_lines];
} sections[num_sections];
};
```
## LFVF
DirectX Flexible Vertex Format Data
```cpp
struct Vertex { // fields according to flags
float position[3]; // D3DFVF_XYZ | D3DFVF_XYZRHW | D3DFVF_XYZB*
float rhw; // D3DFVF_XYZRHW
float weights[3]; // D3DFVF_XYZB*
float normal[3]; // D3DFVF_NORMAL
float point_size; // D3DFVF_PSIZE
uint32_t diffuse; // D3DFVF_DIFFUSE, RGBA
uint32_t specular; //D3DFVF_SPECULAR, RGBA
float tex_coords[D3DFVF_TEXTUREFORMAT][D3DFVF_TEX]; // D3DFVF_TEX* and D3DFVF_TEXTUREFORMAT*
};
struct LFVF {
uint32_t unk;
uint32_t num_entries;
struct {
uint32_t FVF; // FVF vertex data configuration
uint32_t vert_size; //?,
uint32_t num_verts;
Vertex vertices[num_vers];
} entry[num_entries];
};
```
## DUM
Map object data
```cpp
struct DUM {
uint32_t unk_1;
uint32_t num_dummies;
uint32_t unk_2;
struct {
uint32_t name_length;
char name[name_length];
float position[3];
float rotation[3];
uint32_t has_ini;
if (has_ini) {
Block<INI> ini;
};
uint32_t unk_1; // has_next?
} sections[num_sections];
};
```
## MAP
```cpp
struct MAP {
uint32_t version;
uint32_t tex_name_len;
char tex_name[tex_name_len];
// TODO: rest
}
```

130
Classes.md Normal file
View file

@ -0,0 +1,130 @@
# Classes
<!-- TODO: autogenerate? -->
`new()` @ 0x415ca0
`delete()` @ 0x415cb0
> Lots of constructor calls at `0x68367b`
| Name | Size | Constructor | VMT | Inherits From |
| --------------- | ------ | ----------- | -------- | ------------- |
| Action | 0xc | 0x584d50 | 0x790fe0 | |
| ActionClassList | 0x724 | 0x582eb0 | 0x790fb4 | |
| App | ??? | 0x4023e0 | 0x78b4d8 | |
| Cam | 0x13c | 0x4b1210 | 0x78d2d8 | Entity |
| CamPath | 0x1788 | 0x4b1a50 | 0x78d340 | Cam |
| Car | 0x970 | 0x49b300 | 0x78cd40 | WithLife |
| Entity | 0x7c | 0x4e97e0 | 0x78da88 | |
| EntityList | 0xa4 | 0x474d70 | ??? | |
| FCam | 0x274 | 0x4b28e0 | 0x78d3a8 | Cam |
| Missile | 0x9a4 | 0x4ec120 | 0x78db90 | WithLife |
| Obj | 0x288 | 0x4efa40 | 0x78dca8 | Entity |
| SaveVar | 0xc | 0x416540 | | |
| WalkChar | 0x760 | 0x4cdf90 | 0x78d4d8 | WithLife |
| Window | 0x88 | 0x4010e0 | 0x78b480 | App |
| WithLife | 0x544 | 0x4f2a60 | 0x78de00 | Obj |
| World | 0x225c | 0x479870 | 0x78cc6c | |
| item | 0x458 | 0x4ea790 | 0x78dad8 | Obj |
| Py_Entity | ???? | ??? | ??? | |
## Class Inheritance
```mermaid
graph LR
World
ActionClassList
SaveVar
App --> Window
Cam --> CamPath
Entity --> Cam
Cam --> FCam
Entity --> Obj
Obj --> item
Obj --> WithLife
WithLife --> Car
WithLife --> WalkChar
WithLife --> Missile
```
# Attributes (VMT index 16,17,18 for accessor functions)
## Entity
- LLogic
- Name
- Type
- EntityList
- NextInSlot
- NextInList
## FCam
- OnSwitch
- QuakeFactor
- MainTarget
- Target
- EntityLink
- QuakeFactor
- QuakeTime
- HSpeed
- VSpeed
- RetSpd
- CamDist
- CamAng
- CamRot
- AddTurn
- AddTurnSpeed
## Cam
- Fov
- clipNear
- clipFar
-
## Obj
- OnEndMove
- CamName
- NetRes
- OnObjSlot
- LinkModel?
## item
- TakeSound
- OnReset
- OnTake
- Owner
- TgTypeMarker
## Car
- Traf
- Model
- Target
## WithLife
- Descriptor
- Attacker
- ActCtrl
- HeadModel
- Pyromaniac
- OnDeath
- Hit?
- OnDamage
- CanPhoto
- AlwaysUse
- ArrowCanView
- ArrowCanMission
- ArrowCanUse
- ArrnOpt
- ArriOpt
- UseAngSel
- UseMapCheck
- UseAbsAngSel

18
File.md Normal file
View file

@ -0,0 +1,18 @@
# File Formats
File Extension | Description | Chunked
-------------- | ------------------------ | -------
.packed | Game Data Archive | n
.cm3 | Animation file | y
.sm3 | 3d model file | y
.dum | Dummy (map object) file | y
.pth | AI Path | n
.emi | Emission maps/Materials? | y
.amc | Collision Data | y
.ini | Configuration | n
.txa | Texture Animation Config | n
- [Chunked](Chunked.md)
- [Packed](Packed.md)
- [AI Pathfinding Graph](Nodegraph.md)

1
File_Formats.md Normal file
View file

@ -0,0 +1 @@
# File Formats

17
MultiSpriteTable.md Normal file
View file

@ -0,0 +1,17 @@
# MultiSpriteTable
```cpp
struct Tile {
uint16_t pos[2];
uint16_t size[2];
}
struct MST {
char magic[4]; // always "MST\0"
uint32_t data_size;
uint32_t version; // should be 100
uint32_t image_size[2]; // width and height of base image
uint32_t num_tiles; // number of tiles/subsprites
Tile tiles[num_tiles];
}
```

75
Netplay/Netplay.md Normal file
View file

@ -0,0 +1,75 @@
# Encryption (v1.1)
Fixed Key: `020406080a0c0e10121416181a1c1e20222426282a2c2e30323436383a3c3e40`
Packet Structure:
```
[0..nonce_len]: nonce
[nonce_len..(16-nonce_len%16)]: padding
[16..ciphertext_len]: Ciphertext
[nonce_len+(16-nonce_len%16)+ciphertext_len]
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0000 ED C9 C2 F4 7C 6D F2 54 42 EF 46 F6 00 00 00 00 ....|m.TB.F.....
0010 68 13 5C 9A 2B 18 DB 9C 76 BE A0 8A 3E 49 79 3C h.\.+...v...>Iy<
0020 8D 7A C4 4C 8B B0 A4 94 E5 B5 89 54 A6 ED 6D 75 .z.L.......T..mu
0030 1A CA A8 4B 22 B5 03 84 F7 3C DE 4E B0 30 81 29 ...K"....<.N.0.)
0040 3B 70 45 15 33 C0 97 67 85 6B 28 EF 2E 2E D1 83 ;pE.3..g.k(.....
0050 E6 56 A7 81 53 89 3E 52 D8 82 CF 77 92 CF C2 D6 .V..S.>R...w....
0060 9F 37 C5 DE EE 14 4D 3F 1F 82 32 7E 00 00 00 00 .7....M?..2~....
0070 0C 00 00 00 00 00 00 00 5C 00 00 00 00 00 00 00 ........\.......
0080 89 7A A8 32 93 56 B6 68 24 E0 58 63 7F 70 5A D2 .z.2.V.h$.Xc.pZ.
```
Decrypted:
```
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0000 BA CE 01 01 8B 6D 06 00 00 00 01 4D 53 45 31 3A .....m.....MSE1:
0010 20 46 6C 61 67 20 48 75 6E 74 20 32 2D 36 00 05 Flag Hunt 2-6..
0020 00 00 00 00 00 05 18 01 88 AA 9B 46 6C 61 67 48 ...........FlagH
0030 75 6E 74 00 54 A9 2F 05 F0 B4 4F 43 41 00 00 00 unt.T./...OCA...
0040 4D 07 18 01 60 A3 00 05 00 00 80 3F 20 4A DA 3D M...`......? J.=
0050 68 F8 8F 01 19 6A 71 77 20 8B FB 76 h....jqw ..v
```
# Netplay
Game Info Packet
```
Server 'B':FZ (0/10) Ver 1.0 at 192.168.99.1:28086
[0-2] ID (0xbace)
[2-4] Version
[4-5] port (16-bit)
[6-7] max_players (16-bit)
[8-9] curr_player (16-bit)
[10-x] server name (char*)
0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
0019fdc0 ba ce 00 01 b6 6d 0a 00 00 00 42 00 30 fe 19 00 .....m....B.0...
0019fdd0 ff ff ff ff 27 2b b3 9b c7 3e bb 00 9c af 29 00 ....'+...>....).
0019fde0 db 69 00 00 00 00 00 00 00 00 44 65 61 74 68 4d .i........DeathM
0019fdf0 61 74 63 68 00 00 00 00 ff ff 46 5a 00 4a 91 f0 atch......FZ.J..
0019fe00 92 8b 57 4e 7f 00 00 00 10 21 fe 38 0d ae 00 00 ..WN.....!.8....
0019fe10 f0 ce f3 36 a0 e8 0b 77 a0 e8 ...6...w..
```
Player Join Packet
```
[0-3] header/ID?
[6-x] Player name
0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
09c9dfe8 7f 47 00 00 00 0e 55 6e 6e 61 6d 65 64 20 50 6c .G....Unnamed Pl
09c9dff8 61 79 65 72 06 53 42 6f 73 73 31 b9 00 07 50 5f ayer.SBoss1...P_
09c9e008 42 65 74 74 79 06 4d 42 4f 53 53 31 06 4d 42 4f Betty.MBOSS1.MBO
09c9e018 53 53 31 00 00 10 30 2c 31 35 2c 30 2c 30 2c 31 SS1...0,15,0,0,1
09c9e028 35 2c 31 35 2c 31 02 00 00 00 5,15,1....
```
Message | Description
---------------------------------------- | -----------------------------------------------------------------
`5c68625c32383230395c73637261706c616e64` | "Scrapland Server" announcement broadcast (`\hb\28209\scrapland`)
`7f01000007` | Retrieve Game info
`48423d35323932322c3235363a323830383600` | Connection Information (`HB=52922,256:28086`)

146
Netplay/Protocol.md Normal file
View file

@ -0,0 +1,146 @@
# Protocol notes
Raw UDP Payload:
```
0f0000020007007544b3c59018374774c6b246009805000009955f3c00067134
0281062c090900001d007f5e0e22c6ddf52247cce2b64655163b8c8e0b4a272f
44e7afc745ef91354600000000000000000008155f8300035186005100e9fb08
050040007e5700ffff6301000010ff2365f96e1e00000002000000105f000006
21e000daf7b1f73a0000c800ff7544b3c59018374774c6b24697f5d702000000
00000000000000000000000000000000002c2502159ba419d1c4012d3c47252d
af465359899e7745e6531142b96009c4ffff2402159e7f005800b5ff20f1f019
04210bd5f5ffff2302159f4a6cd1c44625314792e5b04614cb45d6da5c26aa4e
44a2ca72c5cdb4edc3ffff2202159e7e0014009efff6e8c89f0822fc8ff3ffff
```
Hexdump:
```
0000 0F 00 00 02 00 07 00 75 44 B3 C5 90 18 37 47 74 .......uD....7Gt
0010 C6 B2 46 00 98 05 00 00 09 95 5F 3C 00 06 71 34 ..F......._<..q4
0020 02 81 06 2C 09 09 00 00 1D 00 7F 5E 0E 22 C6 DD ...,.......^."..
0030 F5 22 47 CC E2 B6 46 55 16 3B 8C 8E 0B 4A 27 2F ."G...FU.;...J'/
0040 44 E7 AF C7 45 EF 91 35 46 00 00 00 00 00 00 00 D...E..5F.......
0050 00 00 08 15 5F 83 00 03 51 86 00 51 00 E9 FB 08 ...._...Q..Q....
0060 05 00 40 00 7E 57 00 FF FF 63 01 00 00 10 FF 23 ..@.~W...c.....#
0070 65 F9 6E 1E 00 00 00 02 00 00 00 10 5F 00 00 06 e.n........._...
0080 21 E0 00 DA F7 B1 F7 3A 00 00 C8 00 FF 75 44 B3 !......:.....uD.
0090 C5 90 18 37 47 74 C6 B2 46 97 F5 D7 02 00 00 00 ...7Gt..F.......
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00b0 00 2C 25 02 15 9B A4 19 D1 C4 01 2D 3C 47 25 2D .,%........-<G%-
00c0 AF 46 53 59 89 9E 77 45 E6 53 11 42 B9 60 09 C4 .FSY..wE.S.B.`..
00d0 FF FF 24 02 15 9E 7F 00 58 00 B5 FF 20 F1 F0 19 ..$.....X... ...
00e0 04 21 0B D5 F5 FF FF 23 02 15 9F 4A 6C D1 C4 46 .!.....#...Jl..F
00f0 25 31 47 92 E5 B0 46 14 CB 45 D6 DA 5C 26 AA 4E %1G...F..E..\&.N
0100 44 A2 CA 72 C5 CD B4 ED C3 FF FF 22 02 15 9E 7E D..r......."...~
0110 00 14 00 9E FF F6 E8 C8 9F 08 22 FC 8F F3 FF FF ..........".....
```
Split up into chunks:
```
0f 00 0002 0007 00 7544b3c5 90183747 74c6b246 0098
0500 00 09955f3c000671340281062c090900001d007f5e0e22c6ddf52247cce2b64655163b8c8e0b4a272f44e7afc745ef913546000000000000
0000 00 08155f8300035186005100e9fb08050040007e5700ffff6301000010ff2365f96e1e000000
0200 00 00105f00000621e000daf7b1f73a0000c800ff7544b3c59018374774c6b24697f5d70200000000000000000000000000000000000000002c
2502 15 9ba419d1c4012d3c47252daf465359899e7745e6531142b96009c4ffff
2402 15 9e7f005800b5ff20f1f01904210bd5f5ffff
2302 15 9f4a6cd1c44625314792e5b04614cb45d6da5c26aa4e44a2ca72c5cdb4edc3ffff
2202 15 9e7e0014009efff6e8c89f0822fc8ff3ffff
```
Log message:
```
Size: 0285 PlyId: 002 NumVals: 007
( 0:'net 5'-00) 09955f3c000671340281062c090900001d007f5e0e22c6ddf52247cce2b64655163b8c8e0b4a272f44e7afc745ef913546000000000000
( 1:'net 0'-00) 08155f8300035186005100e9fb08050040007e5700ffff6301000010ff2365f96e1e000000
( 2:'net 2'-00) 00105f00000621e000daf7b1f73a0000c800ff7544b3c59018374774c6b24697f5d70200000000000000000000000000000000000000002c
( 3:'net549'-15) 9ba419d1c4012d3c47252daf465359899e7745e6531142b96009c4ffff
( 4:'net548'-15) 9e7f005800b5ff20f1f01904210bd5f5ffff
( 5:'net547'-15) 9f4a6cd1c44625314792e5b04614cb45d6da5c26aa4e44a2ca72c5cdb4edc3ffff
( 6:'net546'-15) 9e7e0014009efff6e8c89f0822fc8ff3ffff
```
Structure:
```
0f00 # Unk
0002 # PlayerID
0007 # Num Vals
00 # Unk
7544b3c5 # Pos.X
90183747 # Pos.Y
74c6b246 # Pos.Z
00 # Player Index
98 # Rtt
0500 00 09955f3c000671340281062c090900001d007f5e0e22c6ddf52247cce2b64655163b8c8e0b4a272f44e7afc745ef913546000000000000
0000 00 08155f8300035186005100e9fb08050040007e5700ffff6301000010ff2365f96e1e000000
0200 00 00105f00000621e000daf7b1f73a0000c800ff7544b3c59018374774c6b24697f5d70200000000000000000000000000000000000000002c
2502 15 9ba419d1c4012d3c47252daf465359899e7745e6531142b96009c4ffff
2402 15 9e7f005800b5ff20f1f01904210bd5f5ffff
2302 15 9f4a6cd1c44625314792e5b04614cb45d6da5c26aa4e44a2ca72c5cdb4edc3ffff
2202 15 9e7e0014009efff6e8c89f0822fc8ff3ffff
```
```c
#pragma endian big
struct NetValue {
le u16 entity_index;
u8 entity_type;
char data[?]; // TODO: how is length determined?
};
struct NetData {
le u16 unk;
u16 player_id;
u16 num_vals;
u8 unk_2;
le float pos[3];
u8 player_idx;
u8 rtt_ms;
NetValue values[num_vals];
};
```
Packets are split into Data packets (map change, resources, chat message, etc) and entity (position?) updates
## Packet types
- 00: MapChange:
- str map_name
- str game_mode
- 01: Resource:
- u8: unk
- u16?: num_resources
- [str: resource_name]*num_resources
- 02: Unknown (Keepalive?)
- 03: ChatMessage
- str: message
- 04: UsrString:
- str: data
- 05: Player join:
- u8: player_id
- str: player_name
- str: ship_model
- u16: max_health
- str[4]: engine_models
- str: pilot_model
- str: loadout
- u32: unknown
- 06: unknown
- u8: ent_index
- 07: unknown (reload?)

26
Nodegraph.md Normal file
View file

@ -0,0 +1,26 @@
# AI Nodegraph
Used for pathfinding using the A*-Algorithm.
```cpp
// n= number of dimension (3 or 2)
template<size_t n>
struct Node {
float pos[n];
};
template<size_t n>
struct Edge {
uint32_t num_edge_nodes;
Node<n> nodes[];
};
template<size_t n>
struct Graph {
uint32_t num_nodes;
Node<n> nodes[];
uint32_t num_edges;
Edge<n> edges[];
};
```

6
Overview.md Normal file
View file

@ -0,0 +1,6 @@
# Overview
- Developer Studio: Mercury Steam
- Engine: [ScrapEngine](./ScrapEngine.md)
- Scripting System: embedded Python 1.5.2 interpreter
- Game Data Archive Format: [.packed](./packed.md)

92561
PE_metadata.md Normal file

File diff suppressed because it is too large Load diff

15
Packed.md Normal file
View file

@ -0,0 +1,15 @@
# Packed
```cpp
struct Header {
unsigned char magic[4]; // always BFPK
uint32_t version;
uint32_t number_of_files;
struct File {
uint32_t path_length;
char path[]; // latin1 encoding
uint32_t data_size;
uint32_t data_offset; // offset includes header size so it can be used directly in a seek() call
} files[];
};
```

1
Python_API.md Normal file
View file

@ -0,0 +1 @@
# Python API

2369
Python_Modules.md Normal file

File diff suppressed because one or more lines are too long

18
SUMMARY.md Normal file
View file

@ -0,0 +1,18 @@
# Summary
- [Overview](./Overview.md)
- [ScrapEngine](./ScrapEngine.md)
- [Engine Variables](./Variables.md)
- [Classes](./Classes.md)
- [World](./World.md)
- [Netplay](Netplay.md)
- [Python API](./Python_API.md)
- [Modules](./Python_Modules.md)
- [File Formats](./File_Formats.md)
- [Chunked Formats](./Chunked.md)
- [Packed](./Packed.md)
- [AI Nodegraph](./Nodegraph.md)
- [MultiSpriteTable](MultiSpriteTable.md)
- [ScrapHacks](./ScrapHacks.md)
- [Appendix](./Appendix.md)
- [PE Metadata](./PE_metadata.md)

89
ScrapEngine.md Normal file
View file

@ -0,0 +1,89 @@
# ScrapEngine
- Based on Mercury Engine
- Ingame Scripting Language: Python 1.5.2
## Launch options
Checked in `0x00401010`
- `-console`: open external console window on start
- `-inifile`: *unknown* some kind of `.ini` file, seems to be related to `m3d.ini` in `Data.packed`
Checked in `0x004039b0`
- `-build`: Rebuild `Data.packed` (needs a `filelist.2Bpack`)
- `-dedicated`: start in multiplayer dedicated server mode (needs to be used with `-server`)
- `-server`: start in multiplayer server mode
- `-<var_name>:<var_value>`: override engine variable (example: `-debug:10`)
Checked in `0x00401180`
- `-wideWindow`: start game in widescreen mode
## Files
- `engine.txt`: Contains engine commands? Lexer/Parser @ `0x6168a0`
- Errors get printed to Scene graph debugging console
- Command buffer @ `0x8c1b30`
- Commands:
- `Load`: Load Model?
- `AddAnim`: Load Animation data?
- `PlayAnim`: Play Animation?
- `PivotPos`: ?
- `FUNDIR_NODOS`: ?
- `EFEC_MALLA`: ?
- Values:
- `true`
- `false`
- `engine.log`: Created when `engine.txt` exists
`engine.txt` containing `Load("Models/Vehicles/Ships/SBoss1/SBoss1.SM3", 1)` results in error `D:\Games\Deep Silver\Scrapland\engine.txt (1): Error: missing a ( character`
## Ingame-Console
(Ctrl+\^ or right click on window title bar and select "switch console") (Handler @ `0x402190`)
* `<Code>`: Evaluate Python code
* `:<Var>`: Get Game Engine Variable
* `:<Var> <Val>`: Set Game Engine Variable
* `?`: Show all Game Engine Variables
* `?<String>`: Show all Game Engine Variables matching `<String>`
* `/<command>`: Run Command defined in `QuickConsole.py`
* Expands to `import quickconsole;quickconsole.%s()`
* `/<command> <arg>,<arg>`: Run function in `QuickConsole.py` with argument(s)
* Expands to `import quickconsole;quickconsole.%s(%s)`
## External Console
(Scene graph debugging?) (Handler @ `0x5f9520`)
* `listar luces` List lights in scene
* `listar` list models in scene
* `arbol <model_name>` show details for model
* `mem` (doesn't do anything?)
* `ver uniones`
* Easter Eggs:
* `imbecil`
* `idiota`
* `capullo`
## Window Messages
**TODO**
## Other interesting Memory Addresses
- `0x852914`: D3D8-Device pointer
- `0x7FCC00`: number of opened `.packed` files
- `0x84cb64`: pointer to console command handler
- `0x7fac84`: pointer to C++ callback list structure
- `0x80b2cc`: pointer to ActionClassList (???)
- `0x807a20`: pointer to SScorer (ingame GUI/Menu/Text system) structure (???)
- `0x80a398`: pointer to SoundSystem (???)
- `0x8b18f0`: pointer to Models Data (can be dumped using scene graph debugging console)
- `0x8b18f4`: pointer to Scenes Data (can be dumped using scene graph debugging console)
- `0x8b18f8`: pointer to active Models Data (can be dumped using scene graph debugging console)
- for more see `config.yml`

1
ScrapHacks.md Normal file
View file

@ -0,0 +1 @@
# ScrapHacks

1512
Variables.md Normal file

File diff suppressed because it is too large Load diff

86
World.md Normal file
View file

@ -0,0 +1,86 @@
# World
## Game World/State Pointer @ `0x7fe944`
Object size: `0x225c` bytes
Constructor Address: `0x479870`
Points to World struct
| Offset | Type | Description |
| ------ | ------------------------ | -------------------------------------- |
| 0x0000 | `void**` | Virtual Method Table |
| 0x0004 | `uint32_t` | Slots in Entity Hashtable |
| 0x0008 | `void**` | Pointer to Entity Hashtable |
| 0x00B0 | `??` | Pointer to Ground Object (?) |
| 0x0288 | `pyEntity*` | UsrEntity_0 |
| 0x028C | `pyEntity*` | UsrEntity_1 |
| 0x0290 | `pyEntity*` | UsrEntity_2 |
| 0x0294 | `pyEntity*` | UsrEntity_3 |
| 0x0298 | `uint32_t` | Slots in Model Hashtable |
| 0x029C | `void**` | Pointer to Model Hashtable |
| 0x02B8 | `uint32_t` | Slots in Entity lists Hashtable |
| 0x02BC | `void**` | Pointer to Entity list Hashtable |
| 0x0330 | `float[3]` | Time (why 3 times?) |
| 0x1C6C | `float` | Alarm level |
| 0x1C68 | `float` | Alarm Grow Level |
| 0x2158 | `float` | Used in `World_Init` |
| 0x2170 | `???` | Used in `World_Init` |
| 0x2180 | `float` | Used in `World_Init` |
| 0x2188 | `void*` | Used in `World_Init` |
| 0x218C | `void*` | Used in `World_Init` |
| 0x2190 | `float` | Used in `World_Init` |
| 0x2198 | `void*` | Used in `World_Init` |
| 0x219C | `void*` | Used in `World_Init` |
| 0x21A0 | `void**` | Used in `World_Init` (VTable pointer?) |
| 0x21B4 | `void**` | Used in `World_Init` (VTable pointer?) |
| 0x21C8 | `???` | Used in `World_Init` |
| 0x2204 | `uint32_t` or `uint16_t` | Used in `World_Init` |
| 0x2230 | `float` | Used in `World_Init` |
| 0x2238 | `???` | Used in `World_Init` |
| 0x2254 | `float` | Used in `World_Init` |
## cPyEntity structure
Offset | Type | Description
------ | -------- | --------------------
0x0000 | `void**` | Virtual Method Table
0x0004 | `char*` | Name
0x0008 | `void*` | ???
## Entity Hash Table
Hash-function used: [PJW](https://en.wikipedia.org/wiki/PJW_hash_function) (Same parameters as the example implementation)
Entry format:
```cpp
struct HT_Entry {
void* data;
const char* key;
HT_Entry* next;
}
```
Data format:
Offset | Type | Description
------ | ------------- | ------------------------
0x0 | `void**` | Virtual Method Table (?)
0x4 | `const char*` | name as string
0x14 | `void*` | pointer to self (why?)
0x28 | `float[3]` | Position in Game World
## EntityList Hash Table
Attributes:
- `Near`
- `First`
- `Num`
- `OnDeath`
- `OnDamage`
- ...