Jump to content

[SA|CLEO] SEAWAYS cheat maken voor PC versie


robin_be

Recommended Posts

SEAWAYS cheat voor PC versie



post-140414-0-30180000-1422624343.png

De cheat die ervoor zorgt dat auto's op het water kunnen rijden werkt helaas niet op de PC versie van SA. Hij zit wel effectief in het spel, maar het is niet mogelijk om deze te activeren door een hash-collision.

Het spel bewaart de 29 laatst getypte letters, hasht deze combinatie (een soort van CRC32 in dit geval) en vergelijkt het met de hashes van de cheatcodes.

Doordat de hashes van 2 verschillende cheats hetzelfde zijn (er zijn immers verschillende combinaties mogelijk die dezelfde hash uitkomen; meer uitleg (engels): https://en.wikipedia...mputer_science)), kan er slechts 1 gebruikt worden en werkt de andere niet.

In dit geval werkt de cheat voor "spawn een rancher" wel, en "auto's rijden op water" niet.

[bron]

Ik vond het altijd wel jammer dat deze cheat niet mogelijk was, maar m.b.v. CLEO kunnen we zorgen dat deze wél werkt :D

Benodigdheden

CLEO4 of hoger, liefst met IntOperations.cleo (komt samen met CLEO4)

Sannybuilder

GTA:SA v1 of v1.01

We maken gebruik van geheugenadressen, waardoor dit hoogstwaarschijnlijk niet zal kloppen voor andere versies

SCM-kennis

Basiskennis is een vereiste (Basis SCM-scripten: tutorial door Dutchy3010 & PatrickW)

We zullen ook werken met geheugenadressen (Werken met geheugen (adressen) in CLEO: tutorial door Crypteq)

De cheat maken

Hiervoor hebben we een aantal zeer handige opcodes ter beschikking, in het bijzonder 0ADC 0A8D 0A8C.

voorbeeld 0ADC: test_cheat "BLOWUP"
// kijkt ofdat specifieke tekst getypt geweest is.
// alleen voor CLEO4 en hoger!

voorbeeld 0A8D: 0@ = read_memory 1@ size 4 virtual_protect 0
// leest het opgegeven geheugen en steek dit in een variable.
// CLEO3 en hoger

voorbeeld 0A8C: write_memory 0xC0BC15 size 1 val 1 virtual_protect 0
// schrijft een waarde in het geheugen.
// CLEO3 en hoger
 

Voor meer info i.v.m. de laatste 2 opcodes raad ik je aan om de tutorial Werken met geheugen (adressen) in CLEO van Crypteq te lezen. Hierin staat een mooi uitgebreide uitleg wat die opcodes doen en hoe het werkt.

Dankzij deze pagina (ook hier te vinden) kunnen we zien dat de status van de cheat "auto's rijden op water" aangeduid wordt door een byte op adres 0x969152. Dit heeft de waarde 0 of 1, die aangeeft of deze cheat respectievelijk enabled of disabled is. Dus wat we moeten doen is checken of de speler de cheat heeft ingevoerd (m.b.v. opcode 0ADC) en dan de waarde in het adres veranderen en uiteraard nog een text box tonen met "Cheat activated" en "Cheat deactivated".

Daarnaast zien we ook nog op de Memory Addresses pagina van gtamodding.com dat adres 0x96918C [dword] aangeeft of er ooit gecheat geweest is (voor een waarschuwing te tonen voor het opslaan), 0xBAA472 [dword] geeft aan of er zojuist gecheat geweest is, en 0xB79044 [dword] houdt bij hoeveel keer de speler gecheat heeft in deze save. Dus om een echte cheat de maken, moeten we ook met deze adressen rekening houden.

Aangezien we hier met die geheugenadressen zitten, kan dit script hoogstwaarschijnlijk alleen maar gebruikt worden op de v1 versie van SA!

pseudocode van hoe ons script in elkaar zal zitten:

check als de speler "SEAWAYS" intypt

// (de)activeer de cheat
lees de waarde in op adres 0x969152 [byte] in variable 0@
als 0@ == 1, dan 0@ = 0 en omgekeerd
schrijf de waarde van 0@ terug in adres 0x969152 [byte]

schrijf de waarde 1 op adres 0x96918C [dword]
// hiermee wordt aangetoond of er een cheat gebruikt geweest is, en indien dit zo is wordt er een waarschuwing getoond voor saven.

schrijf de waarde 1 op adres 0xBAA472 [dword]
// hiermee wordt aangetoond of er zojuist een cheat ingegeven is. (het gebruik hiervan is nog onbekend voor mij)

// het aantal keer gecheat met 1 verhogen
lees de waarde in op adres 0xB79044 [dword] in variable 1@
verhoog 1@ met 1
schrijf de waarde van 1@ terug in adres 0xB79044 [dword]

//toon de text box
als 0@ == 1, toon "cheat activated", anders toon "cheat deactivated"

spring terug naar het begin
 

We kunnen if's gebruiken om de waarde van 0@ te veranderen tussen 0 en 1, of dit kan ook veel korter door gebruik te maken van opcode 0B12.

0B12: 0@ = 0@ xor 1
 

Opgelet! Hiervoor heb je de plugin IntOperations.cleo nodig. Deze wordt normaalgezien blijgeleverd als je CLEO4 download/installeert. Indien je deze plugin niet hebt staan in je cleo map zal je game crashen. Als je deze niet wilt/kan gebruiken kun je alsnog gebruikmaken van een if-then(-else)-end structuur.

Dit is een logische/booleaanse operator, meer bepaald een exclusieve of/exclusieve disjunctie.

Waarheidstabel voor een XOR operator (Q is uitkomst):

  A xor B
+---+---+---+
| A | B | Q |
+---+---+---+
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
+---+---+---+

En in ons geval:

 0@ xor 1
+---+---+---+
|0@ | 1 | Q |
+---+---+---+
| 0 | 1 | 1 |
| 1 | 1 | 0 |
+---+---+---+

dus als 0@ == 0, dan zal de uitkomst 1 zijn, en als 0@ == 1, dan zal de uitkomst 0 zijn.
Dit is exact wat we willen bereiken.
 

De code

Nu kunnen we de code maken volgens de structuur van de pseudocode:

{$CLEO .cs}

03A4: name_thread 'SEAWAYS'

:SEAWAYS
00D6: if
8ADC:   not test_cheat "SEAWAYS"
004D: jf @CHEAT // jump_if_false, else_jump etc
0001: wait 0 ms
0002: jump @SEAWAYS

:CHEAT
0A8D: 0@ = read_memory 0x969152 size 1 virtual_protect 0 // lees de status van de cheat
0B12: 0@ = 0@ xor 1 // verander de status (zie uitleg)
0A8C: write_memory 0x969152 size 1 value 0@ virtual_protect 0 // schrijf de nieuwe status van de cheat
0A8C: write_memory 0x96918C size 4 value 1 virtual_protect 0 // cheat gebruikt in spel? (voor waarschuwing voor saven)
0A8C: write_memory 0xBAA472 size 4 value 1 virtual_protect 0 // zojuist een cheat ingevoerd? (gebruik hiervan is nog onbekend voor mij)
0A8D: 1@ = read_memory 0xB79044 size 4 virtual_protect 0 // hoeveel keer gecheated (deactivated telt ook als een cheat erbij)
000A: 1@ += 1 // eentje bijtellen
0A8C: write_memory 0xB79044 size 4 value 1@ virtual_protect 0 // waarde terug wegschrijven
00D6: if
0039:   0@ == 1
004D: jf @DEACTIVATED // jump_if_false, else_jump etc
03E5: show_text_box 'CHEAT1' // Cheat activated
0002: jump @SEAWAYS

:DEACTIVATED
03E5: show_text_box 'CHEAT8' // Cheat deactivated
0002: jump @SEAWAYS

0A93: end_custom_thread
 

En voila, de seaways cheat in 30 lijntjes :D

Bij vragen/opmerkingen/fouten gelieve een reactie te posten.

Edits:

30/01/2015: aantal typfoutjes verbeterd

14/04/2017: fix attachments

22/07/2019: fix dead links

Edited by robin_be
update dead links
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...