Threads, de superbrake mod

In deze Tutorial wordt een volgende stap van Threads uitgelegt, werken met integer values. We maken een mod genaamt, de superbrake mod, waarmee je met 1 druk op de knop bijna direct stil staat.

Benodigde Tools:
-Missionbuilder 1.3

Stap 1:

We gaan beginnen, alleerst zet je natuurlijk een create_thread code in het begin van de main (zie Tutorial THREADS, DE BASIS).

Stap 2:

Allereerst beginnen we met :Labelcheck, gevolgt door een wait code.
We gaan nu checken of de Player nog leeft: we zetten er een IF neer. De regel erna komt de regel die wordt gechecked. Als niet klopt wat in de regel staat, dat de player niet meer leeft, wordt de jump if false code geactiveerd. Hij springt terug naar het begin van de label zodat de thread niet verder wordt gelezen. We gaan verder. We gaan checken of de toetsen achteruit + brake (spatie) worden ingedrukt. Uiteraard wordt dit gedaan met een IF. Nu staat er in plaats van 0, 1, omdat er 2 regels worden gechecked. Natuurlijk staat er weer een jump if false code. We zetten nu een jump-code naar de volgende label.

:Labelcheck
0001: wait 100 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££Labelcheck
00D6: if 1
00E1: key_pressed 0 6
00E1: key_pressed 0 14
004D: jump_if_false ££Labelcheck
0002: jump ££Labelbrake


We gaan verder en maken een tweede label (is handiger werken).
We geven de label weer een naam; :Labelbrake en er volgt weer een wait.
Nu begint het echte werk, we gaan met variablen en floating-point values werken.
In deze label zijn $11 en $10 de variablen, daarmee wordt gerekend. We geven aan dat $11 de auto van de player is door deze code erin te zetten: 03C1: $11 = player $PLAYER_CHAR car. Nu geven we aan wat de speed van de auto is, anders valt er niets te rekenen: 02E3: $10 = car $11 speed. Nu gaan we rekenen, we willen dat de speed verminderd dus gebruiken we een deelteken. We gaan de variable $10, de car speed, delen door 2. We zetten deze regel neer: 0015: $10 /= 2.0 ;; floating-point values. Floating-point values wil zeggen dat er met getallen met decimalen wordt gewerkt, vandaar de punt bij de 2. Nu willen we dat de speed die berekend en verlangzaamd is wordt toegewezen aan de auto, we gebruiken deze code: 04BA: set_car $11 speed_instantly $10.

:Labelbrake
0001: wait 100 ms
03C1: $11 = player $PLAYER_CHAR car
02E3: $10 = car $11 speed
0015: $10 /= 2.0 ;; floating-point values
04BA: set_car $11 speed_instantly $10
00D6: if 0
8020: NOT $10 > 0 ;; floating-point values
004D: jump_if_false ££Labelcheck2
0002: jump ££Labelcheck2

De speed is berekend en toegewezen. We gaan nu wederom een IF gebruiken, maar nu om te checken of de speed 0 is. Er komt een IF met daarachter een regel die gechecked wordt: 8020: NOT $10 > 0 ;; floating-point values. Not geeft aan dat de IF checked of de car speed NIET 0 is, maar als die dat wel is, jumpt hij naar de label: Labelcheck2. Je maakt een NOT code door de eerste 0 te vervangen door een 8 en tussen de regel en het nummer NOT te zetten. Er volgt wederom een jump-code naar de laatste label.

Dit is dan de laatste label, waarin wordt gechecked of de persoon de toesten nog ingedrukt heeft.
Er wordt een labelnaam ingevoerd en er volgt weer een wait-code. We willen checken of de player de toetsen niet heeft ingedrukt en nemen dus voor de check een NOT code. Natuurlijk moet er na de IF een 1 staan omdat er 2 dingen gechecked worden. Als de persoon de toetsen wel inhoudt, jumpt hij naar de eerste label, waar het verhaal zich opnieuw afspeelt. Heeft de player de toetsen niet meer ingedrukt, dan wordt er ook naar de eerste label gejumpt, waarin weer wordt gechecked of de toetsen zijn ingedrukt.

:Labelcheck2
0001: wait 100 ms
00D6: if 1
80E1: NOT key_pressed 0 6
80E1: NOT key_pressed 0 14
004D: jump_if_false ££Labelcheck
0002: jump ££Labelcheck


Dit is de hele Thread bij elkaar (zonder de create_thread code):
 

*Je mag deze code gebruiken in een mod die je maakt, maar dan moet je wel m'n naam in de readme weergeven*

Made by Wauzie
©