KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: [OpenSource] cheat_module für psp games
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
/* ACHTUNG: Code Support nur auf http://ps4dev.net.tc/ !!! */

Hier mal ein cheat_module für PSP games, welches ein Menü aufweist, um dem Benutzer die Möglichkeit zu geben, einzelne Cheats auszuwählen.

Dieses cheat_module wurde auf verschiedenen Spielen getestet und ist für das Spiel "Killzone Liberation" programmiert. Das bedeutet, es läuft, in dieser Form, auf keinem anderen Spiel. Dieses module, die Form, in der ich es release, dient nur nebensächlich zum cheaten, es soll euch zeigen, wie ihr eigene cheat modules für beliebige PSP Spiele erstellt. Es gibt also den kompletten Source Code von mir, die prx für Killzone Liberation und ein Bild, wie das Menü im Spiel aussieht.




[Download] Source code und prx

Und hier der Code für alle, die das obige file nicht downloaden können:

main.h:
Spoiler: (anzeigen)

main.c:
Spoiler: (anzeigen)

cheater.h:
Spoiler: (anzeigen)

cheater.c:
Spoiler: (anzeigen)

makefile:
Spoiler: (anzeigen)


Das Plugin natürlich nach ms0:/seplugins packen und in game.txt den Pfad reinschreiben. Viel Spass!
Sehr guter Code! Schön geschrieben und gleichzeitig effizient Smile

Relok :
Das ist doch c++ oder?
Ich versteh einen Teil davon aber wofür stehen diese zahlen/buchstaben Codes z.b.                 (0x27BDFF90, 0x089D6420) ?


Es ist C... und du solltest eigentlich wissen, wie das Hexdezimalsystem funktioniert, wenn du C++ kannst^^

_sw(Wert, Adresse)

(store word) schreibt einen gewünschten Wert an eine Adresse im Arbeitsspeicher.

vielen dank.

GENAU SO etwas hab ich jetzt gerade gesucht Big Grin

Relok :
Hexadezimal ist auch in der Schule meine Schwäche ^^


Ist doch eigentlich einfach... das gleiche wie Dual und Dezimalsystem, nur eben mit 16 als basis, und Buchstaben, um 10-15 darzustellen...

Danke, ich habe schon länger einen Source eines plugins gesucht ^^

Wenn man zB _sw schreibt, ist das doch ein Assembler-Befehl, oder?
Also könnte man auch _ori oder _multi schreiben, oder?

mfg D3lta

D3lta :
Danke, ich habe schon länger einen Source eines plugins gesucht ^^

Wenn man zB _sw schreibt, ist das doch ein Assembler-Befehl, oder?
Also könnte man auch _ori oder _multi schreiben, oder?

mfg D3lta


_sb/_sh/_sw/_sd/_lb/_lh/_lw/_ld/ sind inline Funktionen, die in psptypes.h deklariert sind.

Code:
/* MIPS-like accessor macros. */
static __inline__ u8  _lb(u32 addr) { return *(vu8 *)addr; }
static __inline__ u16 _lh(u32 addr) { return *(vu16 *)addr; }
static __inline__ u32 _lw(u32 addr) { return *(vu32 *)addr; }
static __inline__ u64 _ld(u32 addr) { return *(vu64 *)addr; }

static __inline__ void _sb(u8 val, u32 addr) { *(vu8 *)addr = val; }
static __inline__ void _sh(u16 val, u32 addr) { *(vu16 *)addr = val; }
static __inline__ void _sw(u32 val, u32 addr) { *(vu32 *)addr = val; }
static __inline__ void _sd(u64 val, u32 addr) { *(vu64 *)addr = val; }


ori/multi/etc. so zu schreiben würde nur die Lesbarkeit senken, schreib diese lieber in C Form.

Alternativ kannst du aber auch inline Assembler benutzen...

Code:
asm volatile("nop");

HacKmaN :

D3lta :
Danke, ich habe schon länger einen Source eines plugins gesucht ^^

Wenn man zB _sw schreibt, ist das doch ein Assembler-Befehl, oder?
Also könnte man auch _ori oder _multi schreiben, oder?

mfg D3lta


_sb/_sh/_sw/_sd/_lb/_lh/_lw/_ld/ sind inline Funktionen, die in psptypes.h deklariert sind.

Code:
/* MIPS-like accessor macros. */
static __inline__ u8  _lb(u32 addr) { return *(vu8 *)addr; }
static __inline__ u16 _lh(u32 addr) { return *(vu16 *)addr; }
static __inline__ u32 _lw(u32 addr) { return *(vu32 *)addr; }
static __inline__ u64 _ld(u32 addr) { return *(vu64 *)addr; }

static __inline__ void _sb(u8 val, u32 addr) { *(vu8 *)addr = val; }
static __inline__ void _sh(u16 val, u32 addr) { *(vu16 *)addr = val; }
static __inline__ void _sw(u32 val, u32 addr) { *(vu32 *)addr = val; }
static __inline__ void _sd(u64 val, u32 addr) { *(vu64 *)addr = val; }


ori/multi/etc. so zu schreiben würde nur die Lesbarkeit senken, schreib diese lieber in C Form.

Alternativ kannst du aber auch inline Assembler benutzen...

Code:
asm volatile("nop");


Was heißt das "volatile" bei

Code:
asm volatile("nop");

?
Und was bedeutet eig das " static?

mfg D3lta

D3lta :

HacKmaN :

D3lta :
Danke, ich habe schon länger einen Source eines plugins gesucht ^^

Wenn man zB _sw schreibt, ist das doch ein Assembler-Befehl, oder?
Also könnte man auch _ori oder _multi schreiben, oder?

mfg D3lta


_sb/_sh/_sw/_sd/_lb/_lh/_lw/_ld/ sind inline Funktionen, die in psptypes.h deklariert sind.

Code:
/* MIPS-like accessor macros. */
static __inline__ u8  _lb(u32 addr) { return *(vu8 *)addr; }
static __inline__ u16 _lh(u32 addr) { return *(vu16 *)addr; }
static __inline__ u32 _lw(u32 addr) { return *(vu32 *)addr; }
static __inline__ u64 _ld(u32 addr) { return *(vu64 *)addr; }

static __inline__ void _sb(u8 val, u32 addr) { *(vu8 *)addr = val; }
static __inline__ void _sh(u16 val, u32 addr) { *(vu16 *)addr = val; }
static __inline__ void _sw(u32 val, u32 addr) { *(vu32 *)addr = val; }
static __inline__ void _sd(u64 val, u32 addr) { *(vu64 *)addr = val; }


ori/multi/etc. so zu schreiben würde nur die Lesbarkeit senken, schreib diese lieber in C Form.

Alternativ kannst du aber auch inline Assembler benutzen...

Code:
asm volatile("nop");


Was heißt das "volatile" bei

Code:
asm volatile("nop");

?
Und was bedeutet eig das " static?

mfg D3lta


Volatile bedeutet, dass der Compiler hier die Extraverbesserungen nicht anschaltet.
Bei

Code:
int i = 0;
while(i == 0);


Würde er beispielsweise eine Endlosschleife machen.

Bei

Code:
volatile int i = 0;
while(i == 0);


Würde er es dagegen stehen lassen, wie es ist.

Was static bei Funktionen bedeutet, weiß ich nicht.

Wenn du jetzt zwei source files hast, z.B. main.c und cheater.c und du hast folgendes in main c und cheater.c stehen:

main.c:

int foo() {
return 0;
}

cheater.c:

int foo() {
return 0;
}

dann bekomst du beim comilierenden folgende Fehler:

"multiple definition of `foo' ".

Um so einen Fehler zu vermeiden, machst du eine Funktion static, so dass du sie immer wieder "verwenden" kannst.

main.c:

static int foo() {
return 0;
}

cheater.c:

int foo() {
return 0;
}

funktioniert wunderbar.
Was bewirkt "static" dann?
Heißt das dann so etwas wie "nur in der Datei" oder so?

mfg D3lta
OMG! Ich hab noch nie einen so kommentierten Quellcode gesehen Big Grin
Static lässt bei C eine Variable oder Funktion nur in dem Modul sichtbar sein, indem es definiert wurde.
Wenn das Schlüsselwort vor einer Variable in einer Funktion steht, so wird diese Variable für die gesammte Laufzeit im Speicher behalten und nicht wie normale lokale Variablen beim verlassen der Funktion gelöscht.
Referenz-URLs