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:
Daniel S. 2021-01-20 23:53:14 +01:00
parent 43c01e81d2
commit 7afdfb5869
50 changed files with 483086 additions and 1709 deletions

6
.gitignore vendored
View file

@ -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
View file

@ -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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

File diff suppressed because one or more lines are too long

22
ScrapHacks/.gitignore vendored Normal file
View 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

View file

@ -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")

View file

@ -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

View file

@ -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
View 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
View file

@ -0,0 +1,4 @@
target
ext
.history
Cargo.lock

12
Scrapper_rs/Cargo.toml Normal file
View 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
View 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