[SA|CLEO] Eigen trein types spawnen
Featured Replies
Recent actief 0
- Er zijn hier geen geregistreerde gebruikers aanwezig.
Een betere weg om onze GTA community te volgen. Leer meer.
Een volledig scherm app op het beginscherm inclusief notificaties, badges en meer.
Eigen trein types spawnen
In deze tutorial ga ik uitleggen hoe je aangepaste trein types kan spawnen. Ben je die 16 voorgedefiniëerde types beu? Zin in verandering? Wil je eindelijk een keer een Freight box in werking zien? Dan is dit de tut voor jou!
Benodigdheden
CLEO3 of hoger
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 het geheugen (Werken met geheugen (adressen) in CLEO: tutorial door @Crypteq)
Inhoud
Voorwoord
Inhoud
Werking
Methode 1
Methode 2
Nog langere types
Finito
Werking
Zoals je (misschien) weet zijn er 16 verschillende trein types in SA (je kan ze zien in sannybuilder help: druk F12 en ga naar SCM documentation > GTA SA > Train types)
De samenstellingen van de types zitten in het geheugen van het spel (baseadres 0x8D44F8).
Vanaf dit adres zijn er 16 blokken die elk 16 nummers (4 bytes) bevatten (dus elk blok is 64 bytes groot (40h), totaal 1024 bytes). Als het spel een trein spawnt, zal hij kijken vanaf adres 0x8D44F8 + type * 40h. Daar staat het modelid van de eerste wagon. Dan zoekt het spel 4 bytes verder voor de volgende wagon, totdat het volgende nummer een 0 is, dan is de volledige trein gespawnt.
Tijdens de testen heb ik gemerkt dat het spel tot 19 wagons kan spawnen, als ik probeer om 20 wagons in één type te steken, crasht het spel als zo een trein spawnt.
Merk op dat 19 wagons meer is dan de 16 nummers per blok. Dit betekent dat de laatste 3 wagons eigenlijk al in het volgende treintype zit.
Ook interessant om te weten: treinen die willekeurig voorbijkomen hebben geen probleem met aangepaste types, deze laden de modellen zelf. Maar in missies worden enkel de modellen geladen die in de standaard types zitten. Als je hier andere modellen toevoegt, zal je game crashen als die missie een trein probeert te spawnen! Meerdere dezelfde wagentjes toevoegen is echter geen probleem.
Opgelet: het is aangeraden om iedere keer terug de waardes op default te zetten nadat je je trein gespawnt hebt. Als de speler namelijk een ander script start (bv andere MPACK) zitten de vorige waarden er nog in en zal de game waarschijnlijk crashen als er een trein spawnt. Het is ook waarschijnlijk niet zo handig voor de speler als er opeens rare treinen spawnen als hij een nieuw spel start. Bij methode 2 zal de game zeker crashen als er een ander script wordt geladen en er een trein spawnt.
Methode 1
Nu kunnen we de nummers veranderen in die blokken om zo de types aan te passen.
Als je een enkele trein wilt spawnen is het handig om type 15 aan te passen en die te spawnen.
Ik raad types 9,14,15 aan omdat die types slechts één wagon hebben. Als je de standaardwaarde dan terug moet zetten, hoef je enkel die ene wagon terug te zetten én de volgende op 0 zetten.
Om dit te doen, moeten we dus de nieuwe model ids schrijven naar de correcte geheugenplaatsen.
De offset van het basis adres naar type 15 is dus 15 * 64 bytes = 960 (3C0h)
0x8D44F8 + 0x3C0 = 0x8D48B8
Merk op dat we enorm handig gewoon de modellen kunnen schrijven met #FREIGHT enz. Sannybuilder verandert dit automatisch naar het juiste nummer bij compilatie (hier: 537).
Methode 2
In plaats van de nummers te veranderen, kunnen we er ook gewoon voor zorgen dat het spel op een andere plaats gaat zoeken naar de types!
Met een disassembler kan je in de code van de exe kijken en zoeken waar de waardes die op locatie 0x8D44F8 liggen ingelezen worden. Als we dan zeggen 'kijk niet naar 0x8D44F8, maar zoek op het adres dat wij jou geven', kunnen we op een simpelere manier de waardes veranderen en terugzetten.
Met opcode 0AC6 krijgen we het adres van de locatie waar label :CARRIAGES staat. Na die label kom er een hex blok, waardoor die waarden letterlijk in het script komen te staan. Natuurlijk worden eerst de #FREIGHT enzo omgezet in hun nummers. Sannybuilder zet ze om naar een number die 2 bytes neemt. Elke wagon moet 4 bytes zijn dus staan er nog 00 00 achter. Dit is dan de locatie waar wij willen dat het spel kijkt om de wagonnen te spawnen. Dan kunnen we die locatie schrijven op de plaatsen die normaal naar de gewone plaats zou kijken (0x8D44F8). Hierdoor zal het spel dus de modellen van de wagonnen halen uit de bytes die in ons script zit, op de locatie van :CARRIAGES.
Hex blok met de standaard waarden:
Merk op dat het eerste getal bv 19 02 00 00 is. Dit is omdat het nummer in little-endiannotatie staat.
19 02 00 00 = 0x00000219 = 537 = #FREIGHT
Nog langere types
Heb je nog niet genoeg met 19 wagonnen? Moet het begin van de trein tegen het einde zitten? Dat kan! (Neen Robin, dat kan niet. Het spel zal crashen omdat je teveel voertuigen zal spawnen)
Op het forum van sannybuilder heb ik code gevonden om 2 treinen aan elkaar te koppelen: https://sannybuilder.com/forums/viewtopic.php?id=18 (post #13).
Maar: hoe langer je het maakt, hoe trager de trein zal versnellen/vertragen!
Finito
En voila, eigen trein types
He, psst! Al eens gedacht wat er zou gebeuren als je een gewone auto in een trein steekt? Probeer het eens
Bewerkt: door robin_be