Lots of changes, expand to read
- Add notes folder with MDBook documentation (the NOTES.md file was getting kind of large) - Add rz_analyze.py, does the same a r2_analyze.py just with Rizin instead of radare2 so the project can be loaded in Cutter (*and* it's faster) - Add Scrap.rzdb, Rizin database for the Scrap.exe executable - Add Scrapper_rs, Rust version of .packed extractor and repacker - replace helplib.txt with helplib.md - add Py_Docs folder which contains generated documentation for the binary python modules built into Scrap.exe
This commit is contained in:
parent
43c01e81d2
commit
7afdfb5869
50 changed files with 483086 additions and 1709 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -261,9 +261,13 @@ __pycache__/
|
|||
*.pyc
|
||||
|
||||
.history
|
||||
**/.history
|
||||
|
||||
ScrapHacks/build/*
|
||||
ScrapHacks/src/D3D8_VMT.hpp
|
||||
.vscode/c_cpp_properties.json
|
||||
tools/*.log
|
||||
frida/*.mp
|
||||
frida/*.mp
|
||||
frida/dump.mp.xz
|
||||
terms.py
|
||||
hist_restore.py
|
||||
|
|
121
NOTES.md
121
NOTES.md
|
@ -11,7 +11,6 @@
|
|||
- `-dedicated`: start in mutliplayer dedicated server mode (needs to be used with `-server`)
|
||||
- `-server`: start in multiplayer server mode
|
||||
|
||||
# Functions identified:
|
||||
|
||||
## Ingame-Console (Ctrl+\^ or right click on titlebar and select "switch console") (Handler@`0x402190`):
|
||||
|
||||
|
@ -134,56 +133,57 @@ struct GameVar {
|
|||
|
||||
Types
|
||||
|
||||
| Value | Type |
|
||||
|-------|-----------------|
|
||||
| `0x1` | const char* |
|
||||
| `0x2` | int32_t |
|
||||
| `0x3` | List of Defines |
|
||||
| `0x4` | float |
|
||||
| `0x5` | function |
|
||||
| `0x6` | Script function |
|
||||
Value | Type
|
||||
----- | ---------------
|
||||
`0x1` | const char*
|
||||
`0x2` | int32_t
|
||||
`0x3` | List of Defines
|
||||
`0x4` | float
|
||||
`0x5` | function
|
||||
`0x6` | Script function
|
||||
|
||||
## Game World/State Pointer @ `0x7fe944`
|
||||
|
||||
Points to World struct
|
||||
|
||||
| Offset | Type | Description |
|
||||
|--------|--------------------------|----------------------------------------|
|
||||
| 0x0000 | `void**` | Virtual Method Table |
|
||||
| 0x0004 | `uint32_t` | Size of Entity Hashtable |
|
||||
| 0x0008 | `void**` | Pointer to Entity Hashtable |
|
||||
| 0x0288 | `pyEntity*` | UsrEntity[0] |
|
||||
| 0x028C | `pyEntity*` | UsrEntity[1] |
|
||||
| 0x0290 | `pyEntity*` | UsrEntity[2] |
|
||||
| 0x0294 | `pyEntity*` | UsrEntity[3] |
|
||||
| 0x02B8 | `uint32_t` | Number of entity lists |
|
||||
| 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` |
|
||||
Offset | Type | Description
|
||||
------ | ------------------------ | --------------------------------------
|
||||
0x0000 | `void**` | Virtual Method Table
|
||||
0x0004 | `uint32_t` | Size of 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]
|
||||
0x02B8 | `uint32_t` | Number of entity lists
|
||||
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*` | ??? |
|
||||
Offset | Type | Description
|
||||
------ | -------- | --------------------
|
||||
0x0000 | `void**` | Virtual Method Table
|
||||
0x0004 | `char*` | Name
|
||||
0x0008 | `void*` | ???
|
||||
|
||||
|
||||
## Entity Hash Table
|
||||
|
@ -202,12 +202,12 @@ struct HT_Entry {
|
|||
|
||||
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 |
|
||||
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
|
||||
|
||||
|
@ -254,16 +254,28 @@ Player Join Packet
|
|||
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`) |
|
||||
Message | Description
|
||||
---------------------------------------- | -----------------------------------------------------------------
|
||||
`5c68625c32383230395c73637261706c616e64` | "Scrapland Server" announcement broadcast (`\hb\28209\scrapland`)
|
||||
`7f01000007` | Retrieve Game info
|
||||
`48423d35323932322c3235363a323830383600` | Connection Information (`HB=52922,256:28086`)
|
||||
|
||||
# [Notes](NOTES.md)
|
||||
|
||||
## 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](file_formats/chunked.md)
|
||||
- [Packed](file_formats/packed.md)
|
||||
- [AI Pathfinding Graph](file_formats/ai_path.md)
|
||||
|
@ -290,7 +302,6 @@ check `r2_analyze.py` for full list
|
|||
# How to enable External Console:
|
||||
|
||||
1. Right click on the title bar (in windowed mode) and click "Switch Console"
|
||||
2. or Use a custom Content Pack (**untested!**)
|
||||
|
||||
# How to enable Scenegraph debugging console
|
||||
|
||||
|
|
118
Py_Docs/SAI.md
Normal file
118
Py_Docs/SAI.md
Normal file
|
@ -0,0 +1,118 @@
|
|||
# SAI
|
||||
|
||||
- *GetStateChar*: `<built-in function GetStateChar>`
|
||||
```
|
||||
GetStateChar(string nameEntity) : Devuelve el estado de la IA del personaje.
|
||||
|
||||
```
|
||||
- *AddVehicleRace*: `<built-in function AddVehicleRace>`
|
||||
```
|
||||
bool AddVehicleRace(cWithLifeEntity *entidad) : Asigna entidad como perteneciente a carrera.
|
||||
```
|
||||
- *SetStateVehicle*: `<built-in function SetStateVehicle>`
|
||||
```
|
||||
SetStateVehicle(0, string nameAgent) : Estado sin movimiento ni disparo.
|
||||
SetStateVehicle(1, float posObjX, float posObjY, float posObjZ, radiusObj, string nameAgent) : Estado alcanzar posición.
|
||||
SetStateVehicle(2, string nameObjectiveDin, string nameAgent) : Estado persecución enemigo.
|
||||
SetStateVehicle(3, string nameAgent) : Estado en ruta.
|
||||
SetStateVehicle(4, string nameAgent) : Estado tráfico.
|
||||
SetStateVehicle(5, string nameAgent, float distStop) : Estado huída con parada.
|
||||
SetStateVehicle(6, float posObjX, float posObjY, float posObjZ, radiusObj, string nameAgent) : Estado alcanzar meta en carrera.
|
||||
SetStateVehicle(7, string nameObjectiveDin, string nameAgent) : Estado persecución.
|
||||
SetStateVehicle(8, string nameObjectiveDin, string nameAgent) : Estado persecución enemigo con uso de hook.
|
||||
|
||||
```
|
||||
- *EnableAIChar*: `<built-in function EnableAIChar>`
|
||||
```
|
||||
EnableAIChar(string nameEntity, int enable, int stupidPathfinding) : Habilita la IA del personaje indicando características asociadas al movimiento).
|
||||
```
|
||||
- *BuildGraph*: `<built-in function BuildGraph>`
|
||||
```
|
||||
BuildGraph(int numNodesRadius, float sizeNodeX, float sizeNodeY, float sizeNodeZ) : Crea el Grafo asociado al Pathfinding
|
||||
```
|
||||
- *AnalizeMap*: `<built-in function AnalizeMap>`
|
||||
```
|
||||
AnalizeMap(float sizeNode) : Analiza características mapa.
|
||||
```
|
||||
- *SetStateChar*: `<built-in function SetStateChar>`
|
||||
```
|
||||
SetStateChar(0, string nameAgent) : Estado sin movimiento ni disparo.
|
||||
SetStateChar(1, string nameAgent, float vel, int withStopTemp) : Estado en ruta.
|
||||
SetStateChar(2, string nameAgent, string nameObjective, float vel) : Estado en persecución objetivo con acción.
|
||||
SetStateChar(3, string nameAgent, string nameObjective, float vel) : Estado en persecución objetivo sin acción.
|
||||
SetStateChar(4, string nameAgent, float posObjX, float posObjY, float posObjZ, float orientX, float orientY, float orientZ, float radiusObj, float velObj) : Estado ir a un punto con orientación final.
|
||||
SetStateChar(5, string nameAgent, string nameObjective, float vel) : Estado huída de otro personaje.
|
||||
SetStateChar(6, string nameAgent, float centerPatrolZone.x, float centerPatrolZone.y, float centerPatrolZone.z, float radiusPatrolZone, float vel, int withStopTemp) : Estado patrulla de zona.
|
||||
SetStateChar(7, string nameAgent, string nameObjective, float vel) : Estado en persecución objetivo con acción.
|
||||
```
|
||||
- *AnalizeGraph2D*: `<built-in function AnalizeGraph2D>`
|
||||
```
|
||||
AnalizeGraph2D() : Analiza características grafo 2D.
|
||||
```
|
||||
- *GetNextRacePoint*: `<built-in function GetNextRacePoint>`
|
||||
```
|
||||
(point) GetNextRacePoint(initialPoint, minDist, maxDist) : A partir de un punto inicial 'initialPoint', una distancia mínima 'minDist' y una distancia máxima 'maxDist', devuelve un punto aleatorio a partir del grafo 3D de la IA en el interior actual.
|
||||
```
|
||||
- *GetOD*: `<built-in function GetOD>`
|
||||
- *SetRotStaticObj*: `<built-in function SetRotStaticObj>`
|
||||
```
|
||||
bool SetRotStaticObj(float maxVelRot, float limIncVelRot) : Asigna rotaciones para movimiento hacia objetivo estático.
|
||||
```
|
||||
- *IniAI*: `<built-in function IniAI>`
|
||||
```
|
||||
IniAI(levelPath) : Inicializa AI para un nivel.
|
||||
```
|
||||
- *GetStateVehicle*: `<built-in function GetStateVehicle>`
|
||||
```
|
||||
GetStateVehicle(string nameEntity) : Devuelve el estado de la IA del vehículo.
|
||||
0 : Estado sin movimiento ni disparo.
|
||||
1 : Estado alcanzar posición.
|
||||
2 : Estado persecución enemigo.
|
||||
3 : Estado en ruta.
|
||||
4 : Estado tráfico.
|
||||
5 : Estado huída con parada.
|
||||
6 : Estado alcanzar meta en carrera.
|
||||
7 : Estado persecución.
|
||||
8 : Estado persecución enemigo con uso de hook.
|
||||
9 : Estado sin movimiento ni disparo por estar objetivo en posición inválida.
|
||||
|
||||
```
|
||||
- *BuildGraph2D*: `<built-in function BuildGraph2D>`
|
||||
```
|
||||
BuildGraph2D(int numNodesRadius, float sizeNodeX, float sizeNodeY, float sizeNodeZ) : Crea el Grafo asociado al Pathfinding 2D
|
||||
```
|
||||
- *AnalizeTraffic*: `<built-in function AnalizeTraffic>`
|
||||
```
|
||||
AnalizeTraffic() : Analiza características tráfico.
|
||||
```
|
||||
- *SetInertia*: `<built-in function SetInertia>`
|
||||
```
|
||||
void SetInertia(bool inertia) : Indica si la nave tiene inercia.
|
||||
```
|
||||
- *InitVehicleRace*: `<built-in function InitVehicleRace>`
|
||||
```
|
||||
InitVehicleRace() : Inicializa carrera de vehículos.
|
||||
```
|
||||
- *GetNearestItemLife*: `<built-in function GetNearestItemLife>`
|
||||
```
|
||||
(itemName) GetNearestItemLife(vehicleName)) : Devuelve el item de vida más cercano a una nave dada.
|
||||
```
|
||||
- *EnableAIVehicle*: `<built-in function EnableAIVehicle>`
|
||||
```
|
||||
EnableAIVehicle(string nameEntity, int enable, int controlStrafe, int controlBrake, int stupidPathfinding) : Habilita la IA del vehículo indicando características asociadas al movimiento).
|
||||
```
|
||||
- *AnalizeGraph*: `<built-in function AnalizeGraph>`
|
||||
```
|
||||
AnalizeGraph() : Analiza características grafo.
|
||||
```
|
||||
- *GetRandomVisibilityPoint*: `<built-in function GetRandomVisibilityPoint>`
|
||||
```
|
||||
(point) GetRandomVisibilityPoint() : Devuelve un punto aleatorio del grafo de puntos de visibilidad.
|
||||
```
|
||||
- *GetReposCharPos*: `<built-in function GetReposCharPos>`
|
||||
```
|
||||
(x,y,z) GetReposCharPos((x,y,z) ,EntityClass,[,EntityName]) : Obtiene un punto de reposicion de personaje (si entidad, se asigna).
|
||||
Retorna (None) si falla
|
||||
```
|
||||
|
||||
|
40
Py_Docs/SAct.md
Normal file
40
Py_Docs/SAct.md
Normal file
|
@ -0,0 +1,40 @@
|
|||
# SAct
|
||||
|
||||
- *CreateClass*: `<built-in function CreateClass>`
|
||||
```
|
||||
CreateClass(classname) : Crea una clase de objeto animado
|
||||
```
|
||||
- *CreateAction*: `<built-in function CreateAction>`
|
||||
```
|
||||
CreateAction(varname) : Crea una accion en la clase actual.
|
||||
```
|
||||
- *DelClass*: `<built-in function DelClass>`
|
||||
```
|
||||
DelClass(classname) : Crea una clase de objeto animado
|
||||
```
|
||||
- *SetCls*: `<built-in function SetCls>`
|
||||
```
|
||||
SetCls(varname,value) : Modifica el valor de una variable de una clase objeto animado
|
||||
```
|
||||
- *GetCls*: `<built-in function GetCls>`
|
||||
```
|
||||
GetCls(varname) : Obtiene el valor de una variable de una clase objeto animado
|
||||
```
|
||||
- *GetClass*: `<built-in function GetClass>`
|
||||
```
|
||||
GetClass(classname) : Activa una clase de objeto animado
|
||||
```
|
||||
- *SetAct*: `<built-in function SetAct>`
|
||||
```
|
||||
SetAct(varname,value) : Modifica el valor de una variable de la accion de una clase objeto animado
|
||||
```
|
||||
- *GetAct*: `<built-in function GetAct>`
|
||||
```
|
||||
GetAct(varname) : Obtiene el valor de una variable de la accion de una clase objeto animado
|
||||
```
|
||||
- *GetAction*: `<built-in function GetAction>`
|
||||
```
|
||||
GetAction(varname) : Obtiene una accion de la clase actual.
|
||||
```
|
||||
|
||||
|
28
Py_Docs/SFX.md
Normal file
28
Py_Docs/SFX.md
Normal file
|
@ -0,0 +1,28 @@
|
|||
# SFX
|
||||
|
||||
- *CharacterConversor*: `<built-in function CharacterConversor>`
|
||||
```
|
||||
FXCharacterConversor(CharacterName, ConversorName, phase) : Conversor de Personajes.
|
||||
```
|
||||
- *BishopSellLife*: `<built-in function BishopSellLife>`
|
||||
```
|
||||
FXBishopSellLife(AttackerName, AttackedName) : Efecto de dar vida (de Attacker [Bishop ó NULL] a Attacked[Usuario]).
|
||||
```
|
||||
- *CharacterConversion*: `<built-in function CharacterConversion>`
|
||||
```
|
||||
FXCharacterConversion(AttackerName, AttackedName, time) : Conversión de Personajes.
|
||||
```
|
||||
- *EmbeddedSet*: `<built-in function EmbeddedSet>`
|
||||
```
|
||||
FXEmbeddedSet(EntityName, FXType) : Asigna el controlador de efectos embedidos.
|
||||
```
|
||||
- *ShipExplosion*: `<built-in function ShipExplosion>`
|
||||
```
|
||||
ShipExplosion(V3D Pos, V3D Vel, float scale, float time, float nflames, bool bcolision) : Explosión de la nave.
|
||||
```
|
||||
- *MoneyTransfer*: `<built-in function MoneyTransfer>`
|
||||
```
|
||||
FXMoneyTransfer(EntityFrom, EntityTo, Time) : Transferencia de dinero
|
||||
```
|
||||
|
||||
|
84
Py_Docs/SInput.md
Normal file
84
Py_Docs/SInput.md
Normal file
|
@ -0,0 +1,84 @@
|
|||
# SInput
|
||||
|
||||
- *Rumble*: `<built-in function Rumble>`
|
||||
```
|
||||
Rumble(iPlayer,Left,Right,Time) : Inicializa el rumble de un pad.
|
||||
```
|
||||
- *GetActionSet*: `<built-in function GetActionSet>`
|
||||
```
|
||||
string GetActionSet() : Obtiene el set de acciones Actual...
|
||||
```
|
||||
- *SetInputFunc*: `<built-in function SetInputFunc>`
|
||||
```
|
||||
SetInputFunc(iPlayer,modfunc) : agrega la funcion callback de entrada modfunc(iPlayer,string)
|
||||
```
|
||||
- *GetCursorChar*: `<built-in function GetCursorChar>`
|
||||
```
|
||||
GetCursorChar(iPlayer) : Obtiene el (x,y,caracter) que indican el estado del cursor.
|
||||
```
|
||||
- *GetDefinedEntry*: `<built-in function GetDefinedEntry>`
|
||||
```
|
||||
value GetDefinedEntry(iPlayer,ActionSet,Action,Device) : obtiene una cadena con la primera definicion del control que encuentre
|
||||
```
|
||||
- *AbortListenToDefine*: `<built-in function AbortListenToDefine>`
|
||||
```
|
||||
AbortListenToDefine() : Aborta la redefinicion en curso
|
||||
```
|
||||
- *ResetToDefault*: `<built-in function ResetToDefault>`
|
||||
```
|
||||
ResetToDefault(iPlayer,ActionSet,Action) : Pone todas las entradas de los controles a valores por defecto.
|
||||
```
|
||||
- *ResetToSplit*: `<built-in function ResetToSplit>`
|
||||
```
|
||||
ResetToSplit() : Resetea el sistema de entrada de datos para iniciar el modo split screen.
|
||||
```
|
||||
- *GetDefinedList*: `<built-in function GetDefinedList>`
|
||||
```
|
||||
GetDefinedList(iPlayer,ActionSet,Action) : obtiene una cadena con la definicion de controles
|
||||
```
|
||||
- *AssingEntry*: `<built-in function AssingEntry>`
|
||||
```
|
||||
int AssingEntry(Device,Entry,Player,ActionSet,Action) : Asigna una entrada... retorna 0 o el Nro de parametro erroneo
|
||||
```
|
||||
- *CheckPadButton*: `<built-in function CheckPadButton>`
|
||||
```
|
||||
CheckPadButton() : Chequea el estado de un determinado botón del pad.
|
||||
```
|
||||
- *ListenToDefine*: `<built-in function ListenToDefine>`
|
||||
```
|
||||
ListenToDefine(iPlayer,ActionSet,Action,LaFunction) : Espera a que el usuario mueva un control y lo redefine
|
||||
```
|
||||
- *SetString*: `<built-in function SetString>`
|
||||
```
|
||||
SetString(iPlayer,String) : Modifica la cadena de entrada de texto.
|
||||
```
|
||||
- *Bind*: `<built-in function Bind>`
|
||||
```
|
||||
Bind(iPlayer,ActionSet,Action) : obtiene una cadena con la definicion de controles
|
||||
```
|
||||
- *GetEntry*: `<built-in function GetEntry>`
|
||||
```
|
||||
(Player,Action) GetEntry(Device,Entry,ActionSet) : Obtiene una entrada, (0,) si vacia
|
||||
```
|
||||
- *GetVirtualKeyboard*: `<built-in function GetVirtualKeyboard>`
|
||||
```
|
||||
GetVirtualKeyboard() : Obtiene el (W,H,Board) que son datos del keyboard virtual.
|
||||
```
|
||||
- *GetString*: `<built-in function GetString>`
|
||||
```
|
||||
GetString(iPlayer) : Obtiene la cadena de entrada de texto.
|
||||
```
|
||||
- *SetVirtualKeyboard*: `<built-in function SetVirtualKeyboard>`
|
||||
```
|
||||
SetVirtualKeyboard(tipo de teclado) : Cambia el teclado virtual
|
||||
```
|
||||
- *SetActionSet*: `<built-in function SetActionSet>`
|
||||
```
|
||||
SetActionSet(string name) : Pone el set de acciones requerido...
|
||||
```
|
||||
- *ClearDefinedList*: `<built-in function ClearDefinedList>`
|
||||
```
|
||||
ClearDefinedList(iPlayer,ActionSet,Action) : Elimina todas las entradas de un control.
|
||||
```
|
||||
|
||||
|
52
Py_Docs/SLogic.md
Normal file
52
Py_Docs/SLogic.md
Normal file
|
@ -0,0 +1,52 @@
|
|||
# SLogic
|
||||
|
||||
- *IsEnemyActive*: `<built-in function IsEnemyActive>`
|
||||
```
|
||||
int IsEnemyActive() : Indica si hay un enemigo activo, mirando el contenido de la lista de enemigos y en el tráfico.
|
||||
```
|
||||
- *ChangeZoneState*: `<built-in function ChangeZoneState>`
|
||||
```
|
||||
void ChangeZoneState(zoneId, state): Pone el estado de una zona de dominación
|
||||
```
|
||||
- *SetOnFloor*: `<built-in function SetOnFloor>`
|
||||
```
|
||||
void SetOnFloor(Entity) : Pone una entidad en el suelo
|
||||
```
|
||||
- *ChangeBatonState*: `<built-in function ChangeBatonState>`
|
||||
```
|
||||
void ChangeBatonState(pos, state): Actualiza el estado del testigo en el modo dominación
|
||||
```
|
||||
- *SetShipToRegenerate*: `<built-in function SetShipToRegenerate>`
|
||||
```
|
||||
void SetShipToRegenerate(shipName, regSpeed,regEndSpeed): Pone una nave a regenerarse
|
||||
```
|
||||
- *SetDominationZones*: `<built-in function SetDominationZones>`
|
||||
```
|
||||
void SetDominationZones(zonesList): Establece la lista de posiciones de las zonas de dominación en la super apuesta de dominación
|
||||
```
|
||||
- *Flash*: `<built-in function Flash>`
|
||||
```
|
||||
void Flash((x,y,z),radius) : Pone una entidad en el suelo
|
||||
```
|
||||
- *GetNearestShip*: `<built-in function GetNearestShip>`
|
||||
```
|
||||
Name GetNearestShip(pos) : Cicla por varias listas y devuelve la nave más cercana a la posición indicada
|
||||
```
|
||||
- *SendSentinelToWatch*: `<built-in function SendSentinelToWatch>`
|
||||
```
|
||||
void SendSentinelToWatch(Pos) : Envia a un centinela a inspeccionar una posicion
|
||||
```
|
||||
- *UpdateTauntEndTime*: `<built-in function UpdateTauntEndTime>`
|
||||
```
|
||||
void UpdateTauntEndTime(time): Tiempo final del taunt
|
||||
```
|
||||
- *GearAttack*: `<built-in function GearAttack>`
|
||||
```
|
||||
void GearAttack(Entity) : Envia a un Gear a atacar a una entidad
|
||||
```
|
||||
- *SetCharState*: `<built-in function SetCharState>`
|
||||
```
|
||||
void SetCharState(entityName, state, entityTargetName) : Pone a una entidad en un estado de logica y un target determinados
|
||||
```
|
||||
|
||||
|
94
Py_Docs/SNet.md
Normal file
94
Py_Docs/SNet.md
Normal file
|
@ -0,0 +1,94 @@
|
|||
# SNet
|
||||
|
||||
- *SendUsrString*: `<built-in function SendUsrString>`
|
||||
```
|
||||
SendUsrString(id,string) : -1 significa a todo el mundo en modo servidor, para cliente id se ignora
|
||||
```
|
||||
- *InitServer*: `<built-in function InitServer>`
|
||||
```
|
||||
InitServer(LevelPath,MaxPlayers,ipport) : Intenta inicializar el servidor.
|
||||
```
|
||||
- *GetBotName*: `<built-in function GetBotName>`
|
||||
```
|
||||
GetBotName() : Obtiene un nombre valido de entidad jugador manejada por el servidor (bot o jugador local)
|
||||
```
|
||||
- *CloseServer*: `<built-in function CloseServer>`
|
||||
```
|
||||
CloseServer(LevelPath) : Acaba el servidor y carga un nivel.
|
||||
```
|
||||
- *IsClient*: `<built-in function IsClient>`
|
||||
```
|
||||
IsClient() : 1 si esta activado el sistema cliente
|
||||
NOTA: Scrap.GetNetFlags() tiene el flag cliente activado
|
||||
si la coneccion se hizo efectiva
|
||||
```
|
||||
- *ServerChangeLevel*: `<built-in function ServerChangeLevel>`
|
||||
```
|
||||
ServerChangeLevel(resource name) : carga el siguiente nivel.
|
||||
```
|
||||
- *DoneBrowser*: `<built-in function DoneBrowser>`
|
||||
```
|
||||
DoneBrowser() : Cierra el browser de red local.
|
||||
```
|
||||
- *InitClient*: `<built-in function InitClient>`
|
||||
```
|
||||
InitClient(ipAddress,ipport) : Inicia el proceso de coneccion con el servidor.
|
||||
```
|
||||
- *CloseClient*: `<built-in function CloseClient>`
|
||||
```
|
||||
CloseClient(LevelPath) : Acaba el cliente y carga un nivel.
|
||||
```
|
||||
- *IsServer*: `<built-in function IsServer>`
|
||||
```
|
||||
IsServer() : 1 si esta activado el sistema servidor
|
||||
NOTA: es para depuracion, mejor use Scrap.GetNetFlags()
|
||||
```
|
||||
- *GetObjName*: `<built-in function GetObjName>`
|
||||
```
|
||||
GetObjName() : Obtiene un nombre valido de Objeto cualesquiera.
|
||||
```
|
||||
- *GetMyClientShip*: `<built-in function GetMyClientShip>`
|
||||
```
|
||||
GetMyClientShip() : retorna el nombre de su nave.
|
||||
```
|
||||
- *ModifyUsrData*: `<built-in function ModifyUsrData>`
|
||||
```
|
||||
ModifyUsrData(ClientId) :
|
||||
modifica desde el servidor los datos locales.
|
||||
```
|
||||
- *AddResource*: `<built-in function AddResource>`
|
||||
```
|
||||
resourceid AddResource(resource name) : intenta agregar un recurso si este no existe. -1 si el pool esta lleno
|
||||
```
|
||||
- *SendChatString*: `<built-in function SendChatString>`
|
||||
```
|
||||
SendChatString(id,string) : -1 significa a todo el mundo en modo servidor, para cliente id se ignora
|
||||
```
|
||||
- *GetClientData*: `<built-in function GetClientData>`
|
||||
```
|
||||
GetClientData() : Obtiene la tupla (ipaddress,ipport)
|
||||
```
|
||||
- *InitBrowser*: `<built-in function InitBrowser>`
|
||||
```
|
||||
InitBrowser(port) : Inicializa el browser de red local.
|
||||
```
|
||||
- *SendMasterString*: `<built-in function SendMasterString>`
|
||||
```
|
||||
SendMasterString(string) : envia una cadena al master. Si retorna cero no hay master.
|
||||
```
|
||||
- *PingInetSvrs*: `<built-in function PingInetSvrs>`
|
||||
```
|
||||
PingInetSvrs() : 1 exitoso. revisa el estado de los servidores en internet. Se realiza despues de browse.
|
||||
```
|
||||
- *IsMaster*: `<built-in function IsMaster>`
|
||||
```
|
||||
IsMaster() : 1 si esta activado el sistema cliente
|
||||
NOTA: Scrap.GetNetFlags() tiene el flag cliente activado
|
||||
si la coneccion se hizo efectiva
|
||||
```
|
||||
- *GetServerData*: `<built-in function GetServerData>`
|
||||
```
|
||||
GetServerData() : Obtiene la tupla (Hostname,ipaddress,ipport)
|
||||
```
|
||||
|
||||
|
132
Py_Docs/SScorer.md
Normal file
132
Py_Docs/SScorer.md
Normal file
|
@ -0,0 +1,132 @@
|
|||
# SScorer
|
||||
|
||||
- *SetCursor*: `<built-in function SetCursor>`
|
||||
```
|
||||
SetCursor(playernumber,CursorName) : pone un item del scorer como cursor
|
||||
```
|
||||
- *Show*: `<built-in function Show>`
|
||||
```
|
||||
Show(playernumber) : Activa el scorer.
|
||||
```
|
||||
- *GetTextArea*: `<built-in function GetTextArea>`
|
||||
```
|
||||
(width, height) GetTextArea(fontType, text) : obtiene la anchura y la altura de un texto dado el texto y el tipo de fuente
|
||||
```
|
||||
- *AddModel*: `<built-in function AddModel>`
|
||||
```
|
||||
AddModel(playernumber,Name,ModelFile,numanim,Radius) : Pre carga un modelo para usarse en el scorer.
|
||||
```
|
||||
- *SetOnPrev*: `<built-in function SetOnPrev>`
|
||||
```
|
||||
SetOnPrev(playernumber,CancelEvent) : Define la funcion que se ejecutara en el caso del pagina abajo.
|
||||
```
|
||||
- *AddChatMsg*: `<built-in function AddChatMsg>`
|
||||
```
|
||||
AddChatMsg(string,red,gree,blue) : Agrega un mensaje a la lista de chat.
|
||||
```
|
||||
- *GetOnCancel*: `<built-in function GetOnCancel>`
|
||||
```
|
||||
(CancelEvent)GetOnCancel(playernumber) : Devuelve la funcion que se ejecutara en el caso del escape.
|
||||
```
|
||||
- *GetDefault*: `<built-in function GetDefault>`
|
||||
```
|
||||
DefaultItemName GetDefault(playernumber) Obtiene el nombre del item por defecto
|
||||
```
|
||||
- *SetOnSpecialHint*: `<built-in function SetOnSpecialHint>`
|
||||
```
|
||||
SetOnSpecialHint(playernumber,SpecialHintTestFunc,SpecialHint) : Define la funcion que decide si se muestra un hint especial
|
||||
```
|
||||
- *SetConsole*: `<built-in function SetConsole>`
|
||||
```
|
||||
SetConsole(show) : oculta/ muestra la consola de pantalla completa
|
||||
```
|
||||
- *Get2DPos*: `<built-in function Get2DPos>`
|
||||
```
|
||||
(x,y) Get2DPos(vector3d) : obtiene en cordenadas de pantalla una posicion del escenario
|
||||
```
|
||||
- *GetActual*: `<built-in function GetActual>`
|
||||
```
|
||||
ActualItem GetActual(playernumber) Obtiene el item actual
|
||||
```
|
||||
- *SetOnNext*: `<built-in function SetOnNext>`
|
||||
```
|
||||
SetOnNext(playernumber,CancelEvent) : Define la funcion que se ejecutara en el caso del pagina abajo.
|
||||
```
|
||||
- *SetMPFunc*: `<built-in function SetMPFunc>`
|
||||
```
|
||||
SetMPFunc(playernumber,Callback) : Callback(id,showmpscorer) (muestra oculta el scorer multiplayer)
|
||||
```
|
||||
- *Set*: `<built-in function Set>`
|
||||
```
|
||||
Set(playernumber,itemname,varname,value) : Modifica el valor de una variable de un item
|
||||
```
|
||||
- *SetSpeechCallback*: `<built-in function SetSpeechCallback>`
|
||||
```
|
||||
SetSpeechCallback(Callback) : Especifica la funcion callback que será llamada
|
||||
```
|
||||
- *Get*: `<built-in function Get>`
|
||||
```
|
||||
Get(playernumber,itemname,varname) : Obtiene el valor de una variable de un item
|
||||
```
|
||||
- *GetMenuAccept*: `<built-in function GetMenuAccept>`
|
||||
```
|
||||
GetMenuAccept(id) : Devuelve el estado de la acción de menu aceptar.
|
||||
```
|
||||
- *SetDefault*: `<built-in function SetDefault>`
|
||||
```
|
||||
SetDefault(playernumber,DefaultItemName) : pone un item del scorer 'por defecto'
|
||||
```
|
||||
- *CancelSpeech*: `<built-in function CancelSpeech>`
|
||||
```
|
||||
CancelSpeech(time) : cancela un mensaje remoto
|
||||
```
|
||||
- *SetHeadMonitor*: `<built-in function SetHeadMonitor>`
|
||||
```
|
||||
SetHeadMonitor(Head,Msg,anm) : Especifica la cabeza que será usada en el monitor y el mensaje.
|
||||
```
|
||||
- *Add*: `<built-in function Add>`
|
||||
```
|
||||
Add(playernumber,itemname,itemtype,AtEnd) : Agrega un item al scorer.
|
||||
```
|
||||
- *SetMarkerSprite*: `<built-in function SetMarkerSprite>`
|
||||
```
|
||||
SetMarkerSprite(id,SpriteName) : pone un sprite como marcador
|
||||
```
|
||||
- *PreloadTexture*: `<built-in function PreloadTexture>`
|
||||
```
|
||||
PreloadTexture(filename) : Precarga una textura
|
||||
```
|
||||
- *SetMsgText*: `<built-in function SetMsgText>`
|
||||
```
|
||||
SetMsgText(text,time) : Muestra un mensaje de sistema y lo desactiva en el tiempo de mundo time
|
||||
```
|
||||
- *Fade*: `<built-in function Fade>`
|
||||
```
|
||||
Fade(id,(r,g,b,a),(r,g,b,a),time) : Realiza un fade de rgba a rgba.
|
||||
```
|
||||
- *Clear*: `<built-in function Clear>`
|
||||
```
|
||||
Clear(playernumber) : Limpia el scorer completamente.
|
||||
```
|
||||
- *SetCinema*: `<built-in function SetCinema>`
|
||||
```
|
||||
SetCinema(id,status,time) : Activa el modo escena de cine.
|
||||
```
|
||||
- *SetSpeechText*: `<built-in function SetSpeechText>`
|
||||
```
|
||||
SetSpeechText(text,time,r,g,b) : activa el texto de una conversacion que durará un tiempo espeficico
|
||||
```
|
||||
- *SetOnCancel*: `<built-in function SetOnCancel>`
|
||||
```
|
||||
SetOnCancel(playernumber,CancelEvent) : Define la funcion que se ejecutara en el caso del escape.
|
||||
```
|
||||
- *Hide*: `<built-in function Hide>`
|
||||
```
|
||||
Hide(playernumber) : Desactiva el scorer.
|
||||
```
|
||||
- *SetLabelText*: `<built-in function SetLabelText>`
|
||||
```
|
||||
SetLabelText(text,time) : Muestra un rotulo de sistema y lo desactiva en el tiempo de mundo time
|
||||
```
|
||||
|
||||
|
72
Py_Docs/SSound.md
Normal file
72
Py_Docs/SSound.md
Normal file
|
@ -0,0 +1,72 @@
|
|||
# SSound
|
||||
|
||||
- *StopVoice*: `<built-in function StopVoice>`
|
||||
```
|
||||
StopVoice(channel) : stop a voice on the specified channel.
|
||||
```
|
||||
- *Play*: `<built-in function Play>`
|
||||
```
|
||||
Play('soundname'[,vol,pan]) : ejecuta un sonido con el volumen deseado.
|
||||
```
|
||||
- *PlaySound*: `<built-in function PlaySound>`
|
||||
```
|
||||
PlaySound((x,y,z),'soundname',vol[,AttenIni,AttenEnd,Doppler]) : ejecuta un sonido en la posicion dada con el volumen deseado.
|
||||
```
|
||||
- *SetMusic*: `<built-in function SetMusic>`
|
||||
```
|
||||
SetMusic('soundname'[,vol]) : set the file of the background music.
|
||||
```
|
||||
- *LoadSound*: `<built-in function LoadSound>`
|
||||
```
|
||||
LoadSound(soundfile) : carga un sonido desde un archivo empaquetado.
|
||||
```
|
||||
- *OpenVoice*: `<built-in function OpenVoice>`
|
||||
```
|
||||
OpenVoice(name,channel) : Preload a voice on a channel.
|
||||
```
|
||||
- *StopAllSounds*: `<built-in function StopAllSounds>`
|
||||
```
|
||||
SCRAP_StopAllSounds() : para todos los sonidos.
|
||||
```
|
||||
- *SetMusicVolume*: `<built-in function SetMusicVolume>`
|
||||
```
|
||||
SetMusicVolume(vel) : set the volume of the background music.
|
||||
```
|
||||
- *UsePS*: `<built-in function UsePS>`
|
||||
```
|
||||
UsePS(Name) : Crea un nuevo sonido posicional
|
||||
```
|
||||
- *SetVoiceString*: `<built-in function SetVoiceString>`
|
||||
```
|
||||
SetVoiceString(channel,volume) : set string user data of a voice.
|
||||
```
|
||||
- *VoiceRemain*: `<built-in function VoiceRemain>`
|
||||
```
|
||||
VoiceRemain(channel,time) : return the remaining time of a voice.
|
||||
```
|
||||
- *CreatePS*: `<built-in function CreatePS>`
|
||||
```
|
||||
CreatePS(Name) : Crea un nuevo sonido posicional
|
||||
```
|
||||
- *SetPS*: `<built-in function SetPS>`
|
||||
```
|
||||
SetPS(name,varname,value) : Modifica el valor de una variable de un sonido posicional
|
||||
```
|
||||
- *PlayVoice*: `<built-in function PlayVoice>`
|
||||
```
|
||||
PlayVoice(channel) : play a voice loaded on the specified channel.
|
||||
```
|
||||
- *DeleteAllSounds*: `<built-in function DeleteAllSounds>`
|
||||
```
|
||||
SCRAP_DeleteAllSounds() : elimina todos los sonidos.
|
||||
```
|
||||
- *GetPS*: `<built-in function GetPS>`
|
||||
```
|
||||
GetPS(name,varname) : Obtiene el valor de una variable de un sonido posicional
|
||||
```
|
||||
- *SetVoiceVolume*: `<built-in function SetVoiceVolume>`
|
||||
```
|
||||
SetVoiceVolume(channel,volume) : set the volume of a voice.
|
||||
```
|
||||
|
||||
|
52
Py_Docs/SVec.md
Normal file
52
Py_Docs/SVec.md
Normal file
|
@ -0,0 +1,52 @@
|
|||
# SVec
|
||||
|
||||
- *Mod*: `<built-in function Mod>`
|
||||
```
|
||||
res Mod(v1) : Devuelve el modulo de un vector
|
||||
```
|
||||
- *Norm*: `<built-in function Norm>`
|
||||
```
|
||||
res Norm(v1) : Normaliza un vector
|
||||
```
|
||||
- *Prod*: `<built-in function Prod>`
|
||||
```
|
||||
res Prod(v1,f) : multiplica un vector por un numero
|
||||
```
|
||||
- *ModSqr*: `<built-in function ModSqr>`
|
||||
```
|
||||
res ModSqr(v1) : Devuelve el modulo (al cuadrado) de un vector
|
||||
```
|
||||
- *DProd*: `<built-in function DProd>`
|
||||
```
|
||||
res DProd(v1,v2) : Calcula el producto escalar de dos vectores
|
||||
```
|
||||
- *Add*: `<built-in function Add>`
|
||||
```
|
||||
res Add(v1,v2) : suma dos vectores 3D
|
||||
```
|
||||
- *CProd*: `<built-in function CProd>`
|
||||
```
|
||||
vRes CProd(v1,v2) : Calcula el producto vectorial de dos vectores
|
||||
```
|
||||
- *NormAng*: `<built-in function NormAng>`
|
||||
```
|
||||
rAng NormAng(Ang) : Normaliza un angulo
|
||||
```
|
||||
- *Sub*: `<built-in function Sub>`
|
||||
```
|
||||
res Sub(v1,v2) : Resta dos vectores 3D
|
||||
```
|
||||
- *GetRotAng*: `<built-in function GetRotAng>`
|
||||
```
|
||||
AngX,AngY GetRotAng(vec) : Obtiene la rotacion de un vector
|
||||
```
|
||||
- *Rotate3D*: `<built-in function Rotate3D>`
|
||||
```
|
||||
res Rotate3D(src,rot) : Rota un vector
|
||||
```
|
||||
- *GetAngle*: `<built-in function GetAngle>`
|
||||
```
|
||||
Ang GetAngle(vec) : Obtiene el ángulo entre dos vectores
|
||||
```
|
||||
|
||||
|
64
Py_Docs/SWeap.md
Normal file
64
Py_Docs/SWeap.md
Normal file
|
@ -0,0 +1,64 @@
|
|||
# SWeap
|
||||
|
||||
- *SetSWeap*: `<built-in function SetSWeap>`
|
||||
```
|
||||
SetSWeap(numammo,svar,svalue) : Pone un valor cadena de las municiones
|
||||
```
|
||||
- *FillPriority*: `<built-in function FillPriority>`
|
||||
```
|
||||
FillPriority() : Inizializa las prioridades de las armas
|
||||
```
|
||||
- *GetSAmmo*: `<built-in function GetSAmmo>`
|
||||
```
|
||||
GetSAmmo(numammo,svar) : Obtiene un valor cadena de las municiones
|
||||
```
|
||||
- *SetFAmmo*: `<built-in function SetFAmmo>`
|
||||
```
|
||||
GetFAmmo(numammo,svar,fvalue) : Pone un valor numerico de las municiones
|
||||
```
|
||||
- *InitWeap*: `<built-in function InitWeap>`
|
||||
```
|
||||
InitWeap(num) : Inicializa las armas num es el numero de armas
|
||||
```
|
||||
- *GetNWeap*: `<built-in function GetNWeap>`
|
||||
```
|
||||
GetNWeap() : Obtiene el numero de armas en el juego
|
||||
```
|
||||
- *GetFAmmo*: `<built-in function GetFAmmo>`
|
||||
```
|
||||
GetFAmmo(numammo,svar) : Obtiene un valor numerico de las municiones
|
||||
```
|
||||
- *GetFirstiWeap*: `<built-in function GetFirstiWeap>`
|
||||
```
|
||||
GetFirstiWeap() : Obtiene el arma primera y por defecto
|
||||
```
|
||||
- *GetSWeap*: `<built-in function GetSWeap>`
|
||||
```
|
||||
GetSWeap(numWeap,svar) : Obtiene un valor cadena de las municiones
|
||||
```
|
||||
- *GetFWeap*: `<built-in function GetFWeap>`
|
||||
```
|
||||
GetFWeap(numWeap,svar) : Obtiene un valor numerico de las municiones
|
||||
```
|
||||
- *GetNAmmo*: `<built-in function GetNAmmo>`
|
||||
```
|
||||
GetNAmmo() : Obtiene el numero de municiones en el juego
|
||||
```
|
||||
- *NetExec*: `<built-in function NetExec>`
|
||||
```
|
||||
NetExec() : Rutinas de red de los misiles
|
||||
```
|
||||
- *SetFWeap*: `<built-in function SetFWeap>`
|
||||
```
|
||||
GetFWeap(numWeap,svar,fvalue) : Pone un valor numerico de las municiones
|
||||
```
|
||||
- *InitAmmo*: `<built-in function InitAmmo>`
|
||||
```
|
||||
InitAmmo(num) : Inicializa las municiones del juego
|
||||
```
|
||||
- *SetSAmmo*: `<built-in function SetSAmmo>`
|
||||
```
|
||||
SetSAmmo(numammo,svar,svalue) : Pone un valor cadena de las municiones
|
||||
```
|
||||
|
||||
|
425
Py_Docs/Scrap.md
Normal file
425
Py_Docs/Scrap.md
Normal file
|
@ -0,0 +1,425 @@
|
|||
# Scrap
|
||||
|
||||
- *DropDebris*: `<built-in function DropDebris>`
|
||||
```
|
||||
DropDebris(name,size) : Lanza un objeto que cae y rebota hasta que desaparece
|
||||
```
|
||||
- *ShowGVars*: `<built-in function ShowGVars>`
|
||||
```
|
||||
ShowGVars() : Muestra una lista de todas las variables globales
|
||||
```
|
||||
- *GetNewLevelPath*: `<built-in function GetNewLevelPath>`
|
||||
```
|
||||
levelpath GetNewLevelPath() : Obtiene el path del próximo nivel
|
||||
```
|
||||
- *SetTime*: `<built-in function SetTime>`
|
||||
```
|
||||
SetTime(Time) : Cambia el tiempo del mundo en segundos
|
||||
```
|
||||
- *SetCam*: `<built-in function SetCam>`
|
||||
```
|
||||
SetCam(i,name) : Activa una camara
|
||||
```
|
||||
- *PreloadAnm*: `<built-in function PreloadAnm>`
|
||||
```
|
||||
PreloadAnm(ObjFilename,AnmFilename) : Precarga una animacion
|
||||
```
|
||||
- *GetCam*: `<built-in function GetCam>`
|
||||
```
|
||||
name GetCam(i) : Obtiene el nombre de una entidad camara
|
||||
```
|
||||
- *GetLockAlarm*: `<built-in function GetLockAlarm>`
|
||||
```
|
||||
Scrap.GetLockAlarm() : verdadero si la alarma esta bloqueada
|
||||
```
|
||||
- *AddItem*: `<built-in function AddItem>`
|
||||
```
|
||||
Scrap.AddItem(Life, string name, int life) : Add Item Life.
|
||||
Scrap.AddItem(Ammo, string name, int typeAmmo, int ammo) : Add Item Ammo.
|
||||
```
|
||||
- *Verbose*: `<built-in function Verbose>`
|
||||
```
|
||||
Verbose(string name) : Muestra un mensaje de parloteo por la consola
|
||||
```
|
||||
- *StartDummySearch*: `<built-in function StartDummySearch>`
|
||||
```
|
||||
StartDummySearch(name,usewildcards) : Inicia la busqueda de dummies en el mapa
|
||||
```
|
||||
- *OpenPack*: `<built-in function OpenPack>`
|
||||
```
|
||||
OpenPack(string PackPath) : Abre un archivo *.packed
|
||||
```
|
||||
- *LaunchDashboard*: `<built-in function LaunchDashboard>`
|
||||
```
|
||||
int Scrap.LaunchDashboard() : sale del juego y ejecuta el dashboard.
|
||||
```
|
||||
- *SaveGameVars*: `<built-in function SaveGameVars>`
|
||||
```
|
||||
Scrap.SaveGameVars(str, str) : Salva un juego en un archivo, con un nombre opcional
|
||||
```
|
||||
- *SphereCall*: `<built-in function SphereCall>`
|
||||
```
|
||||
Scrap.SphereCall(x,y,z,radius,´strmask´,´callback´,[IgnoreGeometry=1]) : testea una esfera y llama a ´callback´ por cada entidad que colisiona
|
||||
```
|
||||
- *SetTimeSpeed*: `<built-in function SetTimeSpeed>`
|
||||
```
|
||||
SetTimeSpeed(TimeSpeed) : Cambia la velocidad del tiempo del mundo.
|
||||
```
|
||||
- *Preload3DObject*: `<built-in function Preload3DObject>`
|
||||
```
|
||||
Preload3DObject(filename,scalex,scaley,scalez) : Precarga un objeto 3D
|
||||
```
|
||||
- *TestLine*: `<built-in function TestLine>`
|
||||
```
|
||||
((x,y,z),s) TestLine((x,y,z),(fz,fy,fz),'strmask') : testea una linea y devuelve el nombre de la entidad y punto de colision o '' si es el mapa o None
|
||||
```
|
||||
- *GetFreeBlocks*: `<built-in function GetFreeBlocks>`
|
||||
```
|
||||
int Scrap.GetFreeBlocks() : obtiene los bloques libres en el disco duro.
|
||||
```
|
||||
- *IncSaveVar*: `<built-in function IncSaveVar>`
|
||||
```
|
||||
int Scrap.IncSaveVar(str[,value]) : incrementa un contador de estadisticas
|
||||
```
|
||||
- *DeselectProfile*: `<built-in function DeselectProfile>`
|
||||
```
|
||||
Scrap.DeselectProfile() : deselecciona el profile actual.
|
||||
```
|
||||
- *GetMoney*: `<built-in function GetMoney>`
|
||||
```
|
||||
money Scrap.GetMoney() : Devuelve el liquido disponible.
|
||||
```
|
||||
- *CreateElements*: `<built-in function CreateElements>`
|
||||
```
|
||||
CreateElements() : Crea una lista de elementos estaticos que pertenecen al mapa.
|
||||
```
|
||||
- *NextDummySearch*: `<built-in function NextDummySearch>`
|
||||
```
|
||||
(s(ddd)(dd)i) NextDummySearch() : Obtiene el proximo dummy, sino None
|
||||
```
|
||||
- *CreateEntity*: `<built-in function CreateEntity>`
|
||||
```
|
||||
CreateEntity(name,x,y,z,type) : Crea una una entidad
|
||||
```
|
||||
- *LoadLevel*: `<built-in function LoadLevel>`
|
||||
```
|
||||
LoadLevel(string name) : Carga un nivel en el siguiente frame
|
||||
```
|
||||
- *DebugInput*: `<built-in function DebugInput>`
|
||||
```
|
||||
string DebugInput() : Detiene todo para iniciar la depuracion
|
||||
```
|
||||
- *GetLangStr*: `<built-in function GetLangStr>`
|
||||
```
|
||||
str Scrap.GetLangStr(Name) : Obtiene una cadena de lenguaje. '' si no existe.
|
||||
```
|
||||
- *Get*: `<built-in function Get>`
|
||||
```
|
||||
Get('GlobalVar') : Obtiene el valor de una variable global
|
||||
```
|
||||
- *SetAlarmChar*: `<built-in function SetAlarmChar>`
|
||||
```
|
||||
Scrap.SetAlarmChar(El_que_se_busca) : Modifica el personaje que se busca.
|
||||
```
|
||||
- *GetEntity*: `<built-in function GetEntity>`
|
||||
```
|
||||
GetEntity(string name) : Retorna una entidad
|
||||
```
|
||||
- *GetLanguage*: `<built-in function GetLanguage>`
|
||||
```
|
||||
lang Scrap.GetLanguage() : Obtiene la lengua actual. None si no fue inicializada.
|
||||
```
|
||||
- *Print*: `<built-in function Print>`
|
||||
```
|
||||
Print(string name) : Muestra un mensaje por la consola siempre
|
||||
```
|
||||
- *SwitchMissionArrows*: `<built-in function SwitchMissionArrows>`
|
||||
```
|
||||
SwitchMissionArrows(MainMissionFile,TargetMissionFile) : Cambia las flechas de mision primaria y secundaria (Modelos)
|
||||
```
|
||||
- *GetFarestParked*: `<built-in function GetFarestParked>`
|
||||
```
|
||||
Entity,Pos = Scrap.GetFarestParked([isparked[,fromPos]]) : Obtiene la nave aparcada mas lejana.
|
||||
```
|
||||
- *CreateSaveProfile*: `<built-in function CreateSaveProfile>`
|
||||
```
|
||||
int Scrap.CreateSaveProfile(str) : Crea un Save profile para X-Box y pone como actual.
|
||||
```
|
||||
- *ExtractPack*: `<built-in function ExtractPack>`
|
||||
```
|
||||
ExtractPack(string PackPath) : Extrae un archivo *.packed
|
||||
```
|
||||
- *SetLockAlarm*: `<built-in function SetLockAlarm>`
|
||||
```
|
||||
Scrap.SetLockAlarm(1/0) : Bloquea/desbloquea la alarma
|
||||
```
|
||||
- *SetSaveVar*: `<built-in function SetSaveVar>`
|
||||
```
|
||||
bool Scrap.SetSaveVar(Name,DefValue) : Modifica una variable (si puede)
|
||||
```
|
||||
- *ListModels*: `<built-in function ListModels>`
|
||||
```
|
||||
ListModels() : Muestra una lista de modelos y escenas
|
||||
```
|
||||
- *ConsoleOut*: `<built-in function ConsoleOut>`
|
||||
```
|
||||
ConsoleOut(string name) : Muestra un mensaje pyton por la consola
|
||||
```
|
||||
- *ScreenShot*: `<built-in function ScreenShot>`
|
||||
```
|
||||
ScreenShot(filename) : Screenshot of the current frame
|
||||
```
|
||||
- *SetMoney*: `<built-in function SetMoney>`
|
||||
```
|
||||
Scrap.SetMoney(money) : Determina el liquido disponible
|
||||
```
|
||||
- *GetFirst*: `<built-in function GetFirst>`
|
||||
```
|
||||
GetFirst() : Retorna la primera entuidad de la lista o none
|
||||
```
|
||||
- *LoadGameVars*: `<built-in function LoadGameVars>`
|
||||
```
|
||||
Scrap.LoadGameVars(str) : Carga un juego en un archivo
|
||||
```
|
||||
- *GetTime*: `<built-in function GetTime>`
|
||||
```
|
||||
GetTime() : Obtiene el tiempo del mundo en segundos
|
||||
```
|
||||
- *GetAlarmChars*: `<built-in function GetAlarmChars>`
|
||||
```
|
||||
(Actual, El_que_se_busca) Scrap.GetAlarmChars() : Obtiene los tipos de personaje que se buscan.
|
||||
```
|
||||
- *SetVideoCurrentMode*: `<built-in function SetVideoCurrentMode>`
|
||||
```
|
||||
SetVideoCurrentMode() : Set Video Current Mode Index
|
||||
```
|
||||
- *AddScheduledFunc*: `<built-in function AddScheduledFunc>`
|
||||
```
|
||||
AddScheduledFunc(time,func,params[,name]) : Ejecuta un codigo en python en un instante de tiempo.
|
||||
```
|
||||
- *ClosePack*: `<built-in function ClosePack>`
|
||||
```
|
||||
ClosePack() : Abre un archivo *.packed
|
||||
```
|
||||
- *CreateEntityList*: `<built-in function CreateEntityList>`
|
||||
```
|
||||
CreateEntityList(listName) : Crea una lista de entidades
|
||||
```
|
||||
- *ProcessDVF*: `<built-in function ProcessDVF>`
|
||||
```
|
||||
ProcessDVF(filename,command) : send a dvf command
|
||||
```
|
||||
- *SetAlarm*: `<built-in function SetAlarm>`
|
||||
```
|
||||
Scrap.SetAlarm(dialpos) : pone la alarma en una posicion (0 desactiva, 1 activa).
|
||||
```
|
||||
- *GetNearestParked*: `<built-in function GetNearestParked>`
|
||||
```
|
||||
Entity,Pos = Scrap.GetNearestParked([isparked[,fromPos]]) : Obtiene la nave aparcada mas cercana.
|
||||
```
|
||||
- *Set*: `<built-in function Set>`
|
||||
```
|
||||
Set('GlobalVar',val) : Modifica el valor de una variable global
|
||||
```
|
||||
- *PythonCompileAll*: `<built-in function PythonCompileAll>`
|
||||
```
|
||||
PythonCompileAll() : compila recursivamente los archivos .py
|
||||
```
|
||||
- *Rand*: `<built-in function Rand>`
|
||||
```
|
||||
Rand(min,max) : Obtiene un numero seudo-aleatorio entre (min,max)
|
||||
```
|
||||
- *Def*: `<built-in function Def>`
|
||||
```
|
||||
Def('GlobalVar') : Obtiene el valor por defecto de una variable global
|
||||
```
|
||||
- *Round*: `<built-in function Round>`
|
||||
```
|
||||
Round(num) : Redondea un numero real al entero más cercano.
|
||||
```
|
||||
- *ModelInfo*: `<built-in function ModelInfo>`
|
||||
```
|
||||
ModelInfo(name) : Muestra información sobre la jerarquía de nodos del modelo
|
||||
```
|
||||
- *UsrEntity*: `<built-in function UsrEntity>`
|
||||
```
|
||||
UsrEntity(ictr) : Retorna una entidad controlada por usario (personaje o nave)
|
||||
```
|
||||
- *GetAlarm*: `<built-in function GetAlarm>`
|
||||
```
|
||||
(active,dialpos,growcode) Scrap.GetAlarm() : Obtiene informacion de la alarma.
|
||||
```
|
||||
- *SetDebrisValue*: `<built-in function SetDebrisValue>`
|
||||
```
|
||||
SetDebrisValue(id,x,y,z) : id = 0:Posicion, 1:Angulos, 2:Velocidad, 3:Velocidad de rotacion
|
||||
```
|
||||
- *MusicPlayer*: `<built-in function MusicPlayer>`
|
||||
```
|
||||
MusicPlayer(filename[,command,param1]) : play music file
|
||||
```
|
||||
- *Des*: `<built-in function Des>`
|
||||
```
|
||||
Des('GlobalVar') : Obtiene el descriptor de una variable global
|
||||
```
|
||||
- *SetCallFunc*: `<built-in function SetCallFunc>`
|
||||
```
|
||||
Scrap.SetCallFunc('!funcname') : Especifica la funcion callback (c++) a llamar. (1 si existe)
|
||||
```
|
||||
- *SetDebrisSys*: `<built-in function SetDebrisSys>`
|
||||
```
|
||||
SetDebrisSys(name,initialnumber,MaxDist,Friction,Scale,Grav,bounce) crea/modifica un sistema de debris
|
||||
```
|
||||
- *Execute*: `<built-in function Execute>`
|
||||
```
|
||||
Scrap.Execute() : Ejecuta una funcion callback (c++).
|
||||
```
|
||||
- *AddParamf*: `<built-in function AddParamf>`
|
||||
```
|
||||
Scrap.AddParamf(Float) : Incluye un parametro a una funcion callback (c++).
|
||||
```
|
||||
- *PreloadLibrary*: `<built-in function PreloadLibrary>`
|
||||
```
|
||||
PreloadLibrary(LibraryName,CompiledFile) : Precarga una libreria de un archivo empaquetado
|
||||
```
|
||||
- *GetVideoCurrentMode*: `<built-in function GetVideoCurrentMode>`
|
||||
```
|
||||
GetVideoCurrentMode() : Get Video Current Mode Index
|
||||
```
|
||||
- *InitLoading*: `<built-in function InitLoading>`
|
||||
```
|
||||
InitLoading() Inicia la pantalla de carga rapida.
|
||||
```
|
||||
- *CallElements*: `<built-in function CallElements>`
|
||||
```
|
||||
CallElements('Function') : llama una funcion Function(Name,x,y,z,angx,angy)
|
||||
```
|
||||
- *GetTimeSpeed*: `<built-in function GetTimeSpeed>`
|
||||
```
|
||||
GetTimeSpeed() : Obtiene la velocidad del tiempo del mundo.
|
||||
```
|
||||
- *CreateSaveVar*: `<built-in function CreateSaveVar>`
|
||||
```
|
||||
bool Scrap.CreateSaveVar(Name,DefValue) : Crea una nueva variable (si puede)
|
||||
```
|
||||
- *EntityListGet*: `<built-in function EntityListGet>`
|
||||
```
|
||||
(value)Scrap.EntityListGet(listName, varName) : Obtiene el valor de una variable de una lista de entidades
|
||||
```
|
||||
- *DeleteProfile*: `<built-in function DeleteProfile>`
|
||||
```
|
||||
int Scrap.DeleteProfile(str) : Borra un profile de X-Box.
|
||||
```
|
||||
- *AddParami*: `<built-in function AddParami>`
|
||||
```
|
||||
Scrap.AddParami(int) : Incluye un parametro a una funcion callback (c++).
|
||||
```
|
||||
- *VideoPlayer*: `<built-in function VideoPlayer>`
|
||||
```
|
||||
VideoPlayer(filename[,command]) : play video file
|
||||
```
|
||||
- *SetLanguage*: `<built-in function SetLanguage>`
|
||||
```
|
||||
res Scrap.SetLanguage(Name[,forcetoreload]) : Modifica la lengua actual. false si ya es la lengua la selecionada
|
||||
```
|
||||
- *AddParams*: `<built-in function AddParams>`
|
||||
```
|
||||
Scrap.AddParams(string) : Incluye un parametro a una funcion callback (c++).
|
||||
```
|
||||
- *GetVideoModes*: `<built-in function GetVideoModes>`
|
||||
```
|
||||
GetVideoModes(NumMode) : Get Video Mode Info
|
||||
```
|
||||
- *GetSaveGamesList*: `<built-in function GetSaveGamesList>`
|
||||
```
|
||||
[(fecha, slot)] Scrap.GetSaveGamesList() : Devuelve una lista de tuplas donde para cada tupla el primer elemento indica el nombre (fecha) del archivo y el segundo elemento indica el slot del que se leerá la partida. La lista está ordenada por la fecha, de la más reciente a la más antigua.
|
||||
```
|
||||
- *GetLevelPath*: `<built-in function GetLevelPath>`
|
||||
```
|
||||
levelpath GetLevelPath() : Obtiene el path del nivel actual
|
||||
```
|
||||
- *BuildFont*: `<built-in function BuildFont>`
|
||||
```
|
||||
BuildFont(name,size) : Construye un archivo de fuente de letras a partir de un .TGA dado
|
||||
```
|
||||
- *DeleteScheduledFuncs*: `<built-in function DeleteScheduledFuncs>`
|
||||
```
|
||||
DeleteScheduledFuncs(name) : Borra las scheduled funcs creadas con un nombre dado.
|
||||
```
|
||||
- *GetNetFlags*: `<built-in function GetNetFlags>`
|
||||
```
|
||||
GetNetFlags() : Obtiene la tupla de flags : client, server, dedicated
|
||||
```
|
||||
- *GetSaveVar*: `<built-in function GetSaveVar>`
|
||||
```
|
||||
value Scrap.GetSaveVar(Name) : obtiene una variable o devuelve none
|
||||
```
|
||||
- *GetLangEntries*: `<built-in function GetLangEntries>`
|
||||
```
|
||||
[str] Scrap.GetLangEntries(Name) : Obtiene un subconjunto de entradas de la tabla de lenguaje que empiecen por 'Name'.
|
||||
```
|
||||
- *FileExist*: `<built-in function FileExist>`
|
||||
```
|
||||
FileExist() check for file existence.
|
||||
```
|
||||
- *GetMinCamDist*: `<built-in function GetMinCamDist>`
|
||||
```
|
||||
GetMinCamDist(x,y,z) : Obtiene la distancia de un punto a la camara
|
||||
```
|
||||
- *EntityListSet*: `<built-in function EntityListSet>`
|
||||
```
|
||||
EntityListSet(listName, varName, value) : Modifica el valor de una variable de una lista de entidades
|
||||
```
|
||||
- *SetAlarmGrow*: `<built-in function SetAlarmGrow>`
|
||||
```
|
||||
Scrap.SetAlarmGrow(growcode) : -1 baja, 0 se mantiene, 1 sube.
|
||||
```
|
||||
- *Exit*: `<built-in function Exit>`
|
||||
```
|
||||
Exit() sale del juego.
|
||||
```
|
||||
- *DelSaveVars*: `<built-in function DelSaveVars>`
|
||||
```
|
||||
Scrap.DelSaveVars(str) : Elimina las <str>* variables
|
||||
```
|
||||
- *SaveConfig*: `<built-in function SaveConfig>`
|
||||
```
|
||||
res Scrap.SaveConfig() : Guarda el fichero de configuración
|
||||
```
|
||||
- *SetSaveProfile*: `<built-in function SetSaveProfile>`
|
||||
```
|
||||
int Scrap.SetSaveProfile(path,name) : Carga un profile de jugador.
|
||||
```
|
||||
- *GetSavedProfilesList*: `<built-in function GetSavedProfilesList>`
|
||||
```
|
||||
[(Directorio, nombre)] Scrap.GetSavedProfilesList() : Devuelve una lista de tuplas donde para cada tupla el primer elemento indica el directorio del profile y el segundo elemento indica el nombre del profile. La lista está ordenada por el criterio de microsoft
|
||||
```
|
||||
- *SetGrid*: `<built-in function SetGrid>`
|
||||
```
|
||||
SetGrid(x,y,z) : Modifica las dimensiones del grid de colision
|
||||
```
|
||||
- *TestSphere*: `<built-in function TestSphere>`
|
||||
```
|
||||
Scrap.TestSphere(x,y,z,radius,´strmask´) : testea una esfera y devuelve el nombre de la entidad o '' si es el mapa o None
|
||||
```
|
||||
- *EndLoading*: `<built-in function EndLoading>`
|
||||
```
|
||||
EndLoading() Inicia la pantalla de carga rapida.
|
||||
```
|
||||
- *Ver*: `<built-in function Ver>`
|
||||
```
|
||||
Ver() Obtiene la version del juego.
|
||||
```
|
||||
- *ConsoleError*: `<built-in function ConsoleError>`
|
||||
```
|
||||
ConsoleError(string name) : Muestra un mensaje de error por la consola
|
||||
```
|
||||
- *GetFloor*: `<built-in function GetFloor>`
|
||||
```
|
||||
i GetFloor(y) : Obtiene el numero de piso en el que esta.
|
||||
```
|
||||
- *AddParkingZone*: `<built-in function AddParkingZone>`
|
||||
```
|
||||
Scrap.AddParkingZone(occupied,pos,name) : Agrega un sitio de parking.
|
||||
```
|
||||
|
||||
|
475700
Scrap.rzdb
Normal file
475700
Scrap.rzdb
Normal file
File diff suppressed because one or more lines are too long
22
ScrapHacks/.gitignore
vendored
Normal file
22
ScrapHacks/.gitignore
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Created by https://www.toptal.com/developers/gitignore/api/cmake
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=cmake
|
||||
|
||||
### CMake ###
|
||||
CMakeLists.txt.user
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
CMakeScripts
|
||||
Testing
|
||||
Makefile
|
||||
cmake_install.cmake
|
||||
install_manifest.txt
|
||||
compile_commands.json
|
||||
CTestTestfile.cmake
|
||||
_deps
|
||||
CMakeUserPresets.json
|
||||
|
||||
### CMake Patch ###
|
||||
# External projects
|
||||
*-prefix/
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/cmake
|
|
@ -5,24 +5,30 @@ project(ScrapHacks
|
|||
DESCRIPTION "Scrapland memory hacking library"
|
||||
LANGUAGES CXX)
|
||||
|
||||
message(STATUS "SCRAPLAND_DIR=${SCRAPLAND_DIR}")
|
||||
message(STATUS "Fetching Scrapland installation folder")
|
||||
get_filename_component(SCRAPLAND_DIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\MercurySteam Entertainment\\Scrapland;DIRECTORY]" ABSOLUTE CACHE)
|
||||
get_filename_component(DEFAULT_SCRAPLAND_DIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\MercurySteam Entertainment\\Scrapland;DIRECTORY]" ABSOLUTE CACHE)
|
||||
|
||||
if(NOT IS_ABSOLUTE "${SCRAPLAND_DIR}" OR NOT EXISTS "${SCRAPLAND_DIR}")
|
||||
message(FATAL_ERROR "Scrapland installation folder not found!")
|
||||
if(NOT IS_ABSOLUTE "${DEFAULT_SCRAPLAND_DIR}" OR NOT EXISTS "${DEFAULT_SCRAPLAND_DIR}")
|
||||
set(DEFAULT_SCRAPLAND_DIR "")
|
||||
endif()
|
||||
set(SCRAPLAND_DIR "${DEFAULT_SCRAPLAND_DIR}" CACHE STRING "Scrapland installation path")
|
||||
|
||||
|
||||
message(STATUS "Scrapland found at ${SCRAPLAND_DIR}")
|
||||
|
||||
message(STATUS "Checking Scrap.exe hash")
|
||||
message(CHECK_START "Checking Scrap.exe hash")
|
||||
file(SHA1 "${SCRAPLAND_DIR}/Bin/Scrap.exe" SCRAP_EXE_HASH)
|
||||
|
||||
if(NOT ${SCRAP_EXE_HASH} STREQUAL "d2dde960e8eca69d60c2e39a439088b75f0c89fa")
|
||||
message(FATAL_ERROR "Scrap.exe hash miss match!")
|
||||
message(CHECK_FAIL "Scrap.exe hash miss match ScrapHacks will probably crash your game!")
|
||||
else()
|
||||
message(CHECK_PASS "Hash matches!")
|
||||
endif()
|
||||
|
||||
# ==============================
|
||||
# "${SCRAPLAND_DIR}/Bin/Scrap.exe"
|
||||
|
||||
add_custom_target(
|
||||
run
|
||||
COMMAND "Scrap.exe"
|
||||
|
@ -30,6 +36,7 @@ add_custom_target(
|
|||
VERBATIM
|
||||
)
|
||||
add_dependencies(run install)
|
||||
|
||||
# ==============================
|
||||
|
||||
set(COMPONENT "ScrapHacks")
|
||||
|
@ -40,7 +47,7 @@ set(ASMJIT_EMBED ON CACHE INTERNAL "")
|
|||
set(ASMTK_EMBED ON CACHE INTERNAL "")
|
||||
set(ZYDIS_BUILD_TOOLS OFF CACHE INTERNAL "")
|
||||
set(ZYDIS_BUILD_EXAMPLES OFF CACHE INTERNAL "")
|
||||
set(toml11_BUILD_TEST OFF CACHE INTERNAL "")
|
||||
set(toml11_BUILD_TEST OFF CACHE INTERNAL "")
|
||||
|
||||
if(WIN32)
|
||||
if(MSVC)
|
||||
|
@ -73,28 +80,28 @@ FetchContent_Declare(
|
|||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
ASM_JIT
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
||||
GIT_REPOSITORY git@github.com:asmjit/asmjit.git
|
||||
GIT_SHALLOW true
|
||||
INSTALL_COMMAND ""
|
||||
CONFIGURE_COMMAND ""
|
||||
ASM_JIT
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
||||
GIT_REPOSITORY git@github.com:asmjit/asmjit.git
|
||||
GIT_SHALLOW true
|
||||
INSTALL_COMMAND ""
|
||||
CONFIGURE_COMMAND ""
|
||||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
ASM_TK
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
||||
GIT_REPOSITORY git@github.com:asmjit/asmtk.git
|
||||
GIT_SHALLOW true
|
||||
INSTALL_COMMAND ""
|
||||
ASM_TK
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
||||
GIT_REPOSITORY git@github.com:asmjit/asmtk.git
|
||||
GIT_SHALLOW true
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
Zydis
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
||||
GIT_REPOSITORY git@github.com:zyantific/zydis.git
|
||||
GIT_SHALLOW true
|
||||
INSTALL_COMMAND ""
|
||||
Zydis
|
||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
||||
GIT_REPOSITORY git@github.com:zyantific/zydis.git
|
||||
GIT_SHALLOW true
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(Python DirectX ASM_JIT ASM_TK Zydis)
|
||||
|
@ -125,6 +132,7 @@ add_custom_command(
|
|||
COMMENT "Generating D3D8_VMT.hpp from d3d8.h"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(D3D8_VMT ALL
|
||||
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/D3D8_VMT.hpp")
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ This will find the Games's installation folder, verify that the version you have
|
|||
- type `import ScrapHack`
|
||||
- type `$help`
|
||||
|
||||
## Config file keys
|
||||
## Config file keys (not yet implemented?)
|
||||
|
||||
- patches.asm: map of address->list of assembly instructions
|
||||
- patches.hex: map of address->hex bytes
|
||||
|
@ -61,4 +61,5 @@ Example:
|
|||
|
||||
- Zydis disassembler
|
||||
- asmJIT/asmTK assembler
|
||||
- nlohmann/json JSON-parser
|
||||
- nlohmann/json JSON-parser
|
||||
- LIEF/lief
|
|
@ -1,5 +1,6 @@
|
|||
@echo off
|
||||
setlocal
|
||||
set SCRAPLAND_DIR=%1
|
||||
if "%VSINSTALLDIR%"=="" (
|
||||
for /f "usebackq tokens=*" %%i in (`vswhere -latest -find **\vcvarsall.bat`) do (
|
||||
call "%%i" x86
|
||||
|
@ -7,13 +8,14 @@ if "%VSINSTALLDIR%"=="" (
|
|||
)
|
||||
if "%VSINSTALLDIR%"=="" (
|
||||
echo "VSINSTALLDIR" not set something is wrong!
|
||||
exit
|
||||
) else (
|
||||
if not exist build cmake -G"NMake Makefiles" -B build
|
||||
if "%1"=="--run" (
|
||||
if "%2"=="--run" (
|
||||
cmake --build build --target run
|
||||
) else (
|
||||
cmake --build build --target install
|
||||
)
|
||||
)
|
||||
|
||||
:END
|
||||
endlocal
|
24
ScrapHacks/patcher.py
Normal file
24
ScrapHacks/patcher.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
import lief
|
||||
import sys
|
||||
|
||||
exit("WIP, not really useful yet")
|
||||
|
||||
Scrap = lief.PE.parse(sys.argv[1])
|
||||
|
||||
data = []
|
||||
|
||||
section_data = lief.PE.Section(".hdata")
|
||||
section_data.content = data
|
||||
section_data.virtual_address = 0x8000
|
||||
section_data.characteristics = (
|
||||
lief.PE.SECTION_CHARACTERISTICS.CNT_INITIALIZED_DATA
|
||||
| lief.PE.SECTION_CHARACTERISTICS.MEM_READ
|
||||
)
|
||||
sh = Scrap.add_library("_ScrapHack.pyd")
|
||||
sh.add_entry("Init")
|
||||
|
||||
builder = lief.PE.Builder(Scrap)
|
||||
|
||||
builder.build_imports(True).patch_imports(True).build()
|
||||
|
||||
builder.write("Scrap_mod_sh.exe")
|
4
Scrapper_rs/.gitignore
vendored
Normal file
4
Scrapper_rs/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
target
|
||||
ext
|
||||
.history
|
||||
Cargo.lock
|
12
Scrapper_rs/Cargo.toml
Normal file
12
Scrapper_rs/Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
|||
[package]
|
||||
name = "scrapper"
|
||||
version = "0.1.0"
|
||||
authors = ["Daniel Seiller <earthnuker@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
byteorder = "1.4.2"
|
||||
encoding = "0.2.33"
|
||||
structopt = {version="0.3.21",features = [ "paw" ]}
|
202
Scrapper_rs/src/main.rs
Normal file
202
Scrapper_rs/src/main.rs
Normal file
|
@ -0,0 +1,202 @@
|
|||
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
|
||||
use encoding::{all::WINDOWS_1252, EncoderTrap};
|
||||
use encoding::{DecoderTrap, Encoding};
|
||||
use std::{
|
||||
collections::VecDeque,
|
||||
convert::TryInto,
|
||||
fs::{self, File},
|
||||
io::Seek,
|
||||
path::PathBuf,
|
||||
};
|
||||
|
||||
use |