Zoeken
Resultaten weergeven voor de tags 'CLEO'.
2 resultaten gevonden
-
[SA][SCM][CLEO4] Werken met geheugen (adressen) in CLEO
Crypteq plaatste een onderwerp in Modding Tutorials
Deel 1: Uitlezen en schrijven Inleiding In deze tutorial wil ik jullie laten zien wat je met geheugen (adressen) m.b.v. CLEO kan doen. Ik ga er in deze tutorial vanuit dat je al (enige) ervaring hebt met SCM, dus deze tutorial is niet voor iedereen. Uiteraard kan je hier zelf mee gaan experimenteren, maar als je niet weet wat je doet dan heb je grote kans dat GTA SA crasht. Wat zijn geheugenadressen? Voordat je aan de slag gaat met het manipuleren van het geheugen van een programma, is het wel handig om te weten wat geheugenadressen zijn. Elke computer heeft "tijdelijk" geheugen waar data in staat die gebruikt worden door programma's, dit geheugen wordt ook wel het "RAM (Random Access Memory)" geheugen genoemd. Als een programma opgestart wordt, dan krijgt deze geheugen toegewezen waar het de gegevens in kwijt kan. Dus alles wat het programma nodig heeft om te functioneren staat in het geheugen. We hebben de mogelijkheid om dat geheugen aan te passen, waardoor je dingen van het programma kan wijzigen, wat normaal niet kan. Een variabel met een geheugen adres, ook wel een pointer genoemd, is niets anders dan een waarde die verwijst naar een bepaalde locatie in het geheugen van het programma. Op die locatie in het geheugen kan een waarde staan die gebruikt wordt door het programma, maar het kan ook een functie zijn die je kan aanroepen. Een geheugenlocatie wordt vaak aangeduid met een hexadecimale waarde (voor meer informatie en een simpele uitleg hierover, zie mijn tutorial van talstelsels). In Sannybuilder kan een hexadecimale waarde herkennen doordat er de volgende tekens voor staan: 0x. Mogelijkheden De mogelijkheden die je met geheugenadressen kan doen zijn eigenlijk oneindig, omdat je letterlijk het geheugen kan manipuleren. De opcodes die je gebruikt in SCM zijn in de basis vaak een tekstuele weergaven van een functie die een geheugenadres aanroept, leest of er naartoe schrijft. Opcodes Het aanpassen van geheugenadressen is met een CLEO opcode is erg simpel, gemaakt. Zowel CLEO 3 en 4 hebben deze functionaliteit. In deze tutorial wordt er gebruik gemaakt van CLEO 4. Er zijn 2 opcodes voor geheugen adressen: 0A8C: write_memory <geheugenadres> size <aantal_bytes> value <hexadecimale waarde> virtual_protect < 0_of_1 > memory (<geheugenadres>): hier geef je de geheugenlocatie op waarnaartoe geschreven moet worden size: Hier geef je op hoeveel bytes je weg gaat schrijven, dit is afhankelijk van het datatype (zie verderop in de tutorial) value: Hier geef je de waarde of variabel met de waarde op die je wilt wegschrijven. virtual_protect: Hier geef je aan of het om geheugen gaat wat normaal alleen gelezen kan worden en niet geschreven. (1 = true, 0 = false) 0A8D: <variabel> = read_memory <geheugenadres> size <aantal_bytes> virtual_protect < 0_of_1 > Eerste waarde (<variabel>) is waar het resultaat van de gelezen bytes in komen te staan memory (<geheugenadres>): hier geef je de geheugenlocatie op waar gelezen moet worden size: Hier geef je op hoeveel bytes je weg gaat lezen, dit is afhankelijk van het datatype (zie verderop in de tutorial) virtual_protect: Hier geef je aan of het om geheugen gaat wat normaal alleen gelezen kan worden en niet geschreven. (1 = true, 0 = false) Data type Voordat je een waarde met deze opcodes kan schrijven of lezen moet je wel weten met wat voor datatype je moet werken. Bijvoorbeeld: Als in het geheugen waardes staan die gelezen moeten worden als een tekst, en ze worden gelezen als nummers (integers) dan krijg je een hele andere waarde dan je zou moeten hebben. Als voorbeeld: als ik in het geheugen de tekst “gtaforum.nl” ga opslaan dan zou dat de volgende hexadecimale waardes hebben: 67 74 61 66 6f 72 75 6d 2e 6e 6c Als ik deze waarde als (decimale) nummers zou uitlezen dan zou ik de volgende waarde krijgen: 125068950647738996618063468 Het is dus erg belangrijk dat je weet met wat voor datatype je te maken hebt. In het geheugen van GTA SA waar je mee werkt kom je de volgende datatypes (het meeste) tegen: Byte: Dit datatype bestaat uit 1 byte en word vaak als boolean (true of false) gebruikt. WORD (short): Een WORD heeft een lengte van 2 bytes, deze word vaak gebruik voor het opslaan van een ID. Dit datatype kan geen decimalen achter de komma hebben. DWORD (integer): Een DWORD (double WORD) is een gewone (32 bit) integer die een lengte heeft van 4 bytes. Dit datatype kan geen decimalen achter de komma hebben. Float: Een float is een getal die decimalen achter de komma kan hebben. In SA is een float doorgaans 4 bytes lang. Short string: Een short string is een tekenreekswaarde waarin maximaal 7 karakters in opgeslagen kunnen worden. Dit datatype is 8 bytes lang Long string: Een long string is een tekenreekswaarde waarin maximaal 15 karakters in opgeslagen kunnen worden. Dit datatype is 16 bytes lang. Welke geheugenadressen kan ik aanpassen? Allemaal leuk en aardig, maar hoe weet ik nu welk geheugenadres ik moet aanpassen? Je kan niet zomaar in het geheugen overal allerlei waardes schrijven, want elk stuk geheugen heeft een bepaald nut. Het ligt er dus aan wat je wilt gaan doen. Oké, dus ik moet precies weten wat het adres is voor wat ik wil gaan doen en ik moet het datatype weten. Maar hoe kom je nou achter al deze gegevens? Gelukkig hebben al vele andere modders uitgezocht wat de meeste gebruikte geheugenadressen zijn en wat voor datatypes erbij hoort. Hier zijn hele lijsten van te vinden. Je kan eens een kijkje nemen op: Gtamodding.com Gtaforums.com (Documenting GTA-SA memory adresses topic) Een andere manier om zelf geheugenadressen op te zoeken zijn via speciale programma’s waarmee je in het geheugen kan zoeken van een programma. Een van de veelgebruikt, en gemakkelijk voor beginners te gebruiken programma is: Cheat engine. Toepassen in de praktijk Als voorbeeld om een waarde in het geheugen aan te passen, gaan we het geld van de speler aanpassen. De geheugenlocatie van het geld is reeds bekend, als we kijken op gtamodding.com dan staat er: 0xB7CE50 - [dword] Money Wat word hiermee bedoelt wordt is: 0xB7CE50: Dit is een hexidecimale weergaven van het geheugen adres hier kan je de waarde van het geld vinden. [dword]: Dit is het datatype, als we in de lijst hierboven kijken dan weten we dat dit een nummer (integer) is van 4 bytes lang. Laten we een heel simpel script maken waarin het geld kunnen weergeven en het geld kunnen aanpassen: {$CLEO .cs} thread 'MONEY' //Geef de variable 0@ de naam MONEY const MONEY = 0@ end :MONEY1 wait 60 if 0AB0: key_pressed 0x4D // Toets M then if 0AB0: key_pressed 0x11 // Toets Ctrl then gosub @GIVE_MONEY else gosub @SHOW_MONEY end end jump @MONEY1 :SHOW_MONEY 0A8D: MONEY = read_memory 0xB7CE50 size 4 virtual_protect 0 //Lees 4 bytes op het geheugenadres 0xB7CE50 en schrijf het naar de variable 0@ (MONEY) 0ACE: show_formatted_text_box "Money: %i" MONEY //Laat een textbox zien me het de tekst Money: en de integer waarde van de variable 0@ (MONEY) return :GIVE_MONEY 0A8D: MONEY = read_memory 0xB7CE50 size 4 virtual_protect 0 //Lees 4 bytes op het geheugenadres 0xB7CE50 en schrijf het naar de variable 0@ (MONEY) 000A: MONEY += 0x2710 //Voeg de waarde 0x2710 aan het resultaat van de variable 0@ (MONEY) toe. (0x2710 = hexidecimale waarde voor 10000, hier kan je ook gewoon de decimale waarde neerzetten.) 0A8C: write_memory 0xB7CE50 size 4 value MONEY virtual_protect 0 //Schrijf 4 bytes naar de geheugenlocatie 0xB7CE50 met de waarde die staat in de variable 0@ (MONEY) return 0A93: end_custom_thread Zoals je in bovenstaand script kan zien is het zeer makkelijk het geheugen uit te lezen en om naartoe te schrijven. Dit was het eerste deel van deze tutorial. In de volgende delen zal ik uitleggen hoe je in een script zelf geheugen kan aanmaken om daar gegevens in te bewaren, en gaan we complexere dingen doen met geheugen(adressen). Als je fouten of onjuiste informatie in deze tutorial vind, meldt het dan a.u.b.- 5 reacties
-
Crypteq verbindt echte wereld met Grand Theft Auto!
Joriz plaatste een onderwerp in Nieuws: Grand Theft Auto
Ons eigen forumlid en moderator Crypteq is een project gestart waarmee hij het spel Grand Theft Auto met de echte wereld verbindt. Onder de titel Out of the game project laat hij een concept zien waarmee je GTA San Andreas kan verbinden met je eigen woonkamer. In dit concept laat hij via een Arduino microcomputer een Ledje knipperen in politiekleuren als in GTA San Andreas de politie achter je aan zit. Een voorbeeld is te zien in het onderstaande filmpje: Al lijkt dit concept relatief simpel is hier echter wel flink code en knutselwerk voor vereist. Voor de koppeling tussen GTA San Andreas en de echte wereld zijn namelijk redelijk wat stappen vereist (zie plaatje).Vooral bijzonder aan dit concept is dat het een hoop nieuwe mogelijkheden biedt, waardoor Grand Theft Auto op nog uitgebreidere wijze met de echte wereld kan worden verbonden. Daarom vroeg ik Crypteq of hij met zijn project nog meer van plan is en wat we in de toekomst kunnen verwachten. Ik stelde hem de volgende vragen: 1. Hoe kwam je op het idee om dit project te starten? Het idee komt deels voort uit de mogelijkheid die GTA V heeft op de PS4; dat de achterkant van de controller oplicht in de kleuren rood en blauw wanneer je een wanted level hebt. Daarnaast is een lichtje aan en uit zetten zeer makkelijk en snel te realiseren, wat mij dus een mooi begin leek voor dit project. 2. Heb je al vaker dingen met een Arduino gemaakt of andere vergelijkbare dingen (wat precies)? Veelal is het voor mezelf gewoon een beetje hobbymatig prutsen, bijvoorbeeld een sensor aansluiten, uitlezen en resultaat weergeven. Iets verzinnen waar je dan ook nog eens wat aan hebt is vaak lastig. Wel heb ik eens tijdens een project met een arduino-variant een "autonoom" karretje gemaakt die aan de hand van een zwarte lijn op de grond z'n weg kon vinden. Verder heb ik in mijn nog een MSP430 en een Raspberry Pi in mijn bezit waar ik ook zulke dingen mee kan maken. 3. Heb je nog meer plannen voor de mod? Veel is er niet bij te verzinnen bij deze "mod", hooguit wat meer ledjes. Dat je dan voor elke wanted level ster een ledje hebt. Al zie ik dit op zichzelf niet echt als een mod, maar meer een onderdeel in een project om elementen uit het spel in de "echte wereld" te visualiseren. 4. Heb je nog meer plannen om de realiteit met GTA te verbinden ? Jazeker, zoals eerder gezegd zie ik dit meer als een project. Ik wil proberen om meerdere elementen uit het spel te gaan visualiseren in de echte wereld. Het volgende project is een (digitale) snelheidsmeter de de snelheid laten zien van het voertuig waar je ingame in rijdt. Voor nu focus ik me nog op GTA San Andreas, maar ik wil dit ook mogelijk gaan maken voor GTA4. Alles wat ik maak om dit mogelijk te maken zal ik in de toekomst delen waarbij ik dan een tutorial zal maken waarin ik uitleg hoe je dit zelf kan maken en wat je ervoor nodig hebt. 5. Kijk je uit naar de release van GTA5 voor op de PC en wat zou je daarvoor willen maken? Ik heb GTA 5 al op de Xbox One, maar daar kan je natuurlijk niet op modden. Daarom kijk ik zeer uit naar de PC versie, welke ik ook zal aanschaffen puur voor het modden. Ik ga er vanuit dat we GTA 5 aardig snel kunnen modden, en dan staat er eigenlijk niets in de weg om dit project ook voor GTA 5 te realiseren. Ik ben zeer enthousiast over Virtual Reality en zodra de consumenten versie van de Oculus Rift (3D bril) verkrijgbaar is, zal ik die ook snel in mijn bezit hebben. Het ontwikkelen hiervoor is wel een stuk moeilijker dan wat ik nu hebt gemaakt, maar we zullen zien. Ik ga er zeker mee experimenteren en dat ga ik natuurlijk ook proberen om er iets mee te doen in GTA! Voor de rest zou ik zeggen: Kom maar op met ideeën! Mocht je zelf ook mee willen knutselen en coole ideeën hebben kan je in het [sA] Wanted level led licht-onderwerp vinden hoe je het zelf kan nabouwen! Crypteq wil ik super bedanken voor dit interview en ik kijk er echt naar uit wat de toekomst nog meer gaat brengen qua 3D, augmented reality en de koppeling van GTA met de echte wereld!- 15 reacties
-
- GTA San Andreas
- Arduino
- (en 8 meer)