robin_be Geplaatst: 30 januari 2015 Rapport Geplaatst: 30 januari 2015 (bewerkt) SEAWAYS cheat voor PC versie 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 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 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 Bewerkt: 22 juli 2019 door robin_be update dead links Reageren
Crypteq Geplaatst: 30 januari 2015 Rapport Geplaatst: 30 januari 2015 Een zeer mooie tutorial! Duidelijke uitleg en verwijzingen naar de bronnen. Ik heb de tutorial in de Master Tutorial List gezet. KUTGW Reageren
Dutchy3010 Geplaatst: 30 januari 2015 Rapport Geplaatst: 30 januari 2015 Top tut, Robin Tof om nog een SCM-coder te zien Reageren
aron24 Geplaatst: 30 januari 2015 Rapport Geplaatst: 30 januari 2015 (bewerkt) Duidelijke uitleg en dit gaat zeker mensen helpen! En nog mooier we hebben er weer een modder bij! Hoera! Bewerkt: 30 januari 2015 door aron24 Reageren
robin_be Geplaatst: 30 januari 2015 Auteur Rapport Geplaatst: 30 januari 2015 Bedankt voor alle mooie reacties hierboven Ik ga het alleszins hier niet bij laten, er komt zeker nog een tutorial (hint: iets met treinen ) Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.