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 ©