Jump to content

[SA|SCM] Een (kleine) cutscene maken


Revolution-Designer

Recommended Posts

Goedemorgen GTAForum,

Deze tutorial is op aanvraag van Correcthost, dit is mijn eerste tutorial dus als jullie nog fouten vinden meld ze dan a.u.b!

Inleiding:

In deze tutorial wil ik graag uitleggen hoe je een (kleine) cutscene maakt. Ik maak de cutscene in een stripped main.scm, oftewel een lege main.scm. Daarom leg ik eerst nog wat andere dingen uit over de lege main.scm. Ook gebruik ik mijn eigen stuk land van Platform Training, jullie kunnen het natuurlijk gewoon in SA doen.

Veel plezier en succes met het volgen van de tut! :tu:

Wat heb je nodig?

- GTA San Andreas

- Sannybuilder 3.04

- GTA SA GXT Editor

- GTA SA Place Manager

- Een lege main.scm (Let op: Je download nu eigenlijk Map Cleaner van Steve-M maar in de .zip is een map genaamd ''extra'' hierin staat de lege scm.

Laten we beginnen:

Ten eerste moet je Sannybuilder geïnstalleerd hebben samen met GTA SA natuurlijk. Daarbij moet je ook de GXT Editor en Place Manager in aparte mappen hebben staan waar je ze snel en gemakkelijk kan terugvinden.

Wanneer je dit allemaal klaar hebt kunnen we echt beginnen.

Start Sannybuilder. Nu klik je op het kleine gele mapje bovenin:

screen1mfv.jpg

Zoek de lege main.scm op en open hem, het kan zijn dat Sannybuilder vraagt naar je SA map maar dit is alleen het geval wanneer je hem voor het eerst gebruikt. Ook moet je in het scherm waar je de main.scm opzoekt bij ''bestandstypen'' compiled scripts selecteren:

screen2vhm.jpg

Als het goed is heb je hem nu geopend, als eerste gaan we een code aanpassen. Zoek de volgende code op:

01F0: set_max_wanted_level_to 6

Verander de 6 naar 0, hierdoor is je maximum wanted level 0 sterren.

Nu gaan we aanpassen waar je spawnt, zoek deze code op:

$7 = 0.0 
$6 = 0.0 
$5 = 30.0

Dit zijn variables die coördinaten bevatten, je ziet ook verder in het script deze code:

$PLAYER_CHAR = Player.Create(#NULL, $7, $6, $5)

Je wordt dus op die coördinaten gespawnt, om een lang verhaal kort te houden:

Verander de coördinaten achter de variables naar jou gewenste start positie. De $7 staat voor de X, de $6 voor Y en de $5 voor Z.

Je kunt deze coördinaten verkrijgen door de Place Manager te gebruiken, start de place manager en start GTA SA op. Vervolgens ga je naar je gewenste start positie toe en keer je terug naar Windows, klik dan in de place manager op ''Add place''. Nu zullen de coördinaten verschijnen. Nu kun je de coördinaten overschrijven of kopiëren uit het ''places configuratie bestand''. Vergeet niet de komma's in de coördinaten te veranderen naar punten!!

Maar er is nog een probleem, helemaal onderaan staat dit:

Model.Load(#HYDRA)

:MAIN_383
wait 0 
if 
  Model.Available(#HYDRA)
else_jump @MAIN_383 
$4 = Car.Create(#HYDRA, $7, $6, $5)
036A: put_actor $PLAYER_ACTOR in_car $4

Deze code geeft aan dat wanneer je een new game start gelijk in een hydra spawnt. Dat moeten we natuurlijk niet hebben. Verwijder alle codes die ik in mijn vorige code box liet zien zodat je deze overhoud:

016C: restart_if_wasted_at $7 $6 $5 angle 0.0 town_number 0 

:MAIN_383
fade 1 1000 
wait 100 
03E6: remove_text_box

Nu worden we op de juiste plek gespawnt, we kunnen geen wanted level krijgen en we worden niet in een hydra gespawnt. Nu gaan we met de cutscene beginnen.

Nu gaan we een sphere maken. Een sphere is zo'n rode ronde cirkel waar je in moet lopen om een missie te starten.

Zet onder deze code:

:MAIN_383
fade 1 1000 
wait 100

Deze code:

03BC: $108 = create_sphere_at x y z radius 3.0

Je ziet een variable staan, $108. Deze mag je naar een willekeurig getal noemen. Daarna komen de x, y en z, deze mag je natuurlijk zelf invullen maar zorg er wel voor dat hij op een redelijke plaats staat. Dan staat er nog ''radius 3.0'', dit is de grote van de sphere, zet dit op 2.0.

Klik nu bovenin op dit knopje en vervolgens op het SA logo ernaast:

screen3w.jpg

Als het goed is heb je dit als resultaat:

screen4jbw.jpg

Zet nu voor de jump in deze code 2 schuine streepjes neer:

:MAIN_441
wait 2500 
//jump @MAIN_441

Vervolgens zet je hieronder :MAIN_420:

:MAIN_441
wait 2500 
//jump @MAIN_441

:MAIN_420

We gaan nu uitbreiden zodat de sphere wordt verwijderd, het beeld verduistert en vervolgens de cutscene start.

:MAIN_420
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 460.0074 -1841.482 radius 2.0 2.0 on_foot  
jf @MAIN_420
03BD: destroy_sphere $140 
fade 0 1000
wait 1000
02A3: enable_widescreen 1
Player.CanMove($PLAYER_CHAR) = False
Camera.SetPosition(x, y, z, 0.0, 0.0, 0.0)
Camera.PointAt(x, y, z, 2)
fade 1 1000
wait 1000

Even op een rijtje wat er nu gebeurt:

  • Het script kijkt of de speler vlakbij een plek is, zo ja dan:
  • Wordt de sphere verwijderd
  • Wordt het beeld donker
  • Wordt de ''widescreen'' ingesteld
  • Kan de speler niet meer bewegen
  • Wordt de camera verplaatst
  • en wordt het beeld weer normaal

Alles spreekt nu eigenlijk voor zich behalve de camera, namelijk deze 2 codes:

Camera.SetPosition(x, y, z, 0.0, 0.0, 0.0)
Camera.PointAt(x, y, z, 2)

De eerste code geeft aan waar de camera zich bevindt en de tweede code geeft aan waar de camera zich op richt. De x, y en z in beide codes spreken voor zich. De eerste code, waar de camera hangt en de tweede code waar hij naartoe kijkt. Dat kan op een actor, of ander punt zijn.

Nu willen we graag instellen hoe lang de camera op een ander punt staat en richt. Dit kunnen we doen door een ''wait'' aan te passen. Als het goed is heb je nu ongeveer deze code:

:MAIN_420
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 460.0074 -1841.482 radius 2.0 2.0 on_foot  
jf @MAIN_420
03BD: destroy_sphere $140 
fade 0 1000
wait 1000
02A3: enable_widescreen 1
0A48: enable_menu_access_in_widescreen_mode 1 
Player.CanMove($PLAYER_CHAR) = False
Camera.SetPosition(468.8174 , -1848.294, 15.148442, 0.0, 0.0, 0.0)
Camera.PointAt($7, $6, $5, 2)
fade 1 1000
wait 1000

Verander nu de 1000 van de allerlaatste ''wait'' in bijvoorbeeld 10000. Nu zal de camera 10 seconden (10000ms) op dat ene punt hangen en op dat ene punt staren. Je kunt natuurlijk de 10000 ook in een lager of hoger getal invullen.

Klik nu weer bovenin op compile knopje en weer op het San Andreas logo, nu kun je het begin van je cutscene bekijken! Maar wanneer de ''wait'' ophoudt crasht het spel. Dit komt omdat er verder geen script meer is en de camera nog niet goed staat.

We gaan nu text toevoegen aan onze cutscene, hier hebben we de GXT Editor nodig die je, als het goed is, hebt gedownload. Start de Editor op en zoek en open de american.gxt hij zou normaal in de text map moeten staan in de GTA SA map. Klik nu onder ''table name'' de MAIN aan en klik op ''entry'' en vervolgens add...:

screen5qxy.jpg

Geef nu je entry een naam en type in het grote vak rechts je tekst. Vervolgens klik je op je entry onder ''entry name''. Sla nu het bestand op en ga weer terug naar Sannybuilder.

Eenmaal in Sannybuilder zoek je weer de code van de cutscene, verwerk nu deze code:

00BB: show_text_lowpriority GXT 'TUT' time 5000 flag 1

in de cutscene code:

:MAIN_420
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 460.0074 -1841.482 radius 2.0 2.0 on_foot  
jf @MAIN_420
03BD: destroy_sphere $140 
fade 0 1000
wait 1000
02A3: enable_widescreen 1
0A48: enable_menu_access_in_widescreen_mode 1 
Player.CanMove($PLAYER_CHAR) = False
Camera.SetPosition(468.8174 , -1848.294, 15.148442, 0.0, 0.0, 0.0)
Camera.PointAt($7, $6, $5, 2)
fade 1 1000
00BB: show_text_lowpriority GXT 'TUT' time 5000 flag 1
wait 10000

In de code die ik je net gaf staat ''TUT'', dit moet je veranderen naar de naam van je entry. Je kunt ook meerdere teksten achter elkaar zetten door simpelweg de regel opnieuw onder de code te zetten. Maar let op, in de staat 5000, oftewel 5 seconden. Stel dat je bij allebei de codes 6000 neerzet dan duurt het in totaal 12 seconden. Maar de wait gaat maar tot 10 seconden. Dus moet je de wait ook aanpassen in lengte.

Nu gaan we ervoor zorgen dat de camera naar een andere punt springt. We voegen deze code toe:

0936: set_camera 468.8174 -1848.294 15.148442 position_to 457.8174 -1838.294 15.148442 time 20000 drop_mode 1 
wait 2000 
Camera.SetPosition(457.8174, -1838.294, 15.148442, 0.0, 0.0, 0.0)
wait 10000

We krijgen dus dit:

:MAIN_420
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 460.0074 -1841.482 radius 2.0 2.0 on_foot  
jf @MAIN_420
03BD: destroy_sphere $140 
fade 0 1000
wait 1000
02A3: enable_widescreen 1
0A48: enable_menu_access_in_widescreen_mode 1 
Player.CanMove($PLAYER_CHAR) = False
Camera.SetPosition(468.8174, -1848.294, 15.148442, 0.0, 0.0, 0.0)
Camera.PointAt($7, $6, $5, 2)
fade 1 1000
00BB: show_text_lowpriority GXT 'TUT' time 5000 flag 1
wait 6000
0936: set_camera x y z position_to x y z time 20000 drop_mode 1 
wait 2000 
Camera.SetPosition(x, y, z, 0.0, 0.0, 0.0)
wait 10000

De camera verplaatst zich nu langzaam naar de nieuwe plek. Bij deze code:

0936: set_camera x y z position_to x y z time 20000 drop_mode 1

zijn de eerste x, y en z de coördinaten van waar de camera eerst stond en de tweede x, y en z zijn de coördinaten waar de camera naartoe gaat.

Nu plaats je nog een wait onderaan en gaan we naar het laatste gedeelte. Hoe zetten we de camera weer goed?

Dat kan door de volgende code:

02A3: enable_widescreen 0
Camera.Restore
Player.CanMove($PLAYER_CHAR) = True

De code geeft aan dat de widescreen wordt uitgeschakeld, de camera wordt goed gezet en dat de speler weer kan lopen. Dit is naar mijn weten alleen maar mogelijk in een thread, dus die gaan we even maken.

Zoek deze code op:

:MAIN_383
fade 1 1000 
wait 100
03BC: $140 = create_sphere_at 460.0074 -1841.482 8.148442 radius 2.0 
03E6: remove_text_box

Dus waar je de sphere hebt gemaakt. Vervolgens zet je eronder:

create_thread @MAIN_420

Nu hebben we een thread gemaakt, maar nu nog het einde. Ga helemaal naar beneden naar het einde van je script en zet er dit neer:

end_thread

Nu is de thread gemaakt en moet de cutscene werken!

Dit is mijn hele code tot nu toe:

:MAIN_383
fade 1 1000 
wait 100
03BC: $140 = create_sphere_at 460.0074 -1841.482 8.148442 radius 2.0 
03E6: remove_text_box 
create_thread @MAIN_420

:MAIN_441
wait 2500 
//jump @MAIN_441 

:MAIN_420
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 460.0074 -1841.482 radius 2.0 2.0 on_foot  
jf @MAIN_420
03BD: destroy_sphere $140 
fade 0 1000
wait 1000
02A3: enable_widescreen 1
0A48: enable_menu_access_in_widescreen_mode 1 
Player.CanMove($PLAYER_CHAR) = False
Camera.SetPosition(468.8174, -1848.294, 15.148442, 0.0, 0.0, 0.0)
Camera.PointAt($7, $6, $5, 2)
fade 1 1000
00BB: show_text_lowpriority GXT 'TUT' time 5000 flag 1
wait 6000
0936: set_camera 468.8174 -1848.294 15.148442 position_to 457.8174 -1838.294 15.148442 time 10000 drop_mode 1
0920: point_camera $7 $6 $5 transverse_to $7 $6 $5 time 10000 mode 1   
wait 10000
Camera.SetPosition(457.8174, -1838.294, 15.148442, 0.0, 0.0, 0.0)
Camera.PointAt($7, $6, $5, 2) 
wait 5000
02A3: enable_widescreen 0
Camera.Restore
Player.CanMove($PLAYER_CHAR) = True
end_thread

Ik hoop dat jullie er iets van geleerd hebben en bedankt voor het lezen!

Vragen, commentaar enz. zijn allemaal welkom!

Grtz RD :cya:

Link to comment
Share on other sites

Lol, ik had ook een cutscene tutorial geschreven, maar moet die nog steeds eens vertalen. ^_^

Tip voor die stripped scm: die heeft iedereen al... Program Files > Sannybuilder > Data > SA > Stripped. Dan hoeven ze in ieder geval geen andere "rotzooi" te downloaden.

Daarnaast, waarom place manager? Sannybuilder heeft een hele handige coord tool: CTRL+SHIFT+C voor de coordinaten, CTRL+SHIFT+E voor de hoek (angle).

Verder moet ik zeggen, er zit behoorlijk veel lariekoek in. Dingen die nergens voor nodig zijn bij het maken van een cutscene. Ik zou het gewoon basic laten, en alles verwijderen wat niet bij de cutscene zelf hoort... Dat maakt het handiger voor mensen, want ze hebben de basis al anders zouden ze deze tutorial niet lezen!

BTW, $ met alleen getallen kan bugs geven. Gebruik altijd minimaal 1 letter om dat te voorkomen.

Maar goed, alles bij elkaar een prima tutorial. :)

Link to comment
Share on other sites

Thx, RD :D

Ga hem nu eventjes volgen :D

Ik krijg steeds een warning met die k*t place manager!

er is iets met GTA.ocx :?

Wat nu? Want ik moet die coordinaten hebben!

Edited by CorrectHost
Link to comment
Share on other sites

Daarnaast, waarom place manager? Sannybuilder heeft een hele handige coord tool: CTRL+SHIFT+C voor de coordinaten, CTRL+SHIFT+E voor de hoek (angle).

Post boven je. :7

Link to comment
Share on other sites

@RD

Goede tut! :tu:

KUTGW

@CorrectHost

Kijk de post boven je Sannybuilder die heeft een eigen "coords manager" daarmee kan je zo de coordinaten opvragen waar je ingame bent.

Dutchy3010 was me net voor :7

@Hieronder

coords manager werkt perfect en is makkelijker dan Place manager (mij mening)

Edited by BC7
Link to comment
Share on other sites

Waarom gaat mijn sphere niet weg?

// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
DEFINE OBJECTS 1
DEFINE OBJECT STEVE-M.COM			 

DEFINE MISSIONS 0

DEFINE EXTERNAL_SCRIPTS 0 // Use -1 in order not to compile AAA script

DEFINE UNKNOWN_EMPTY_SEGMENT 0

DEFINE UNKNOWN_THREADS_MEMORY 0

{$VERSION 3.1.0027}

//-------------MAIN---------------
thread 'MAIN' 
fade 0 0 
042C: set_total_missions_to 0 
030D: set_max_progress 0 
01F0: set_max_wanted_level_to 0 
set_wb_check_to 0 
00C0: set_current_time_hours_to 10 minutes_to 0 
$7 = 2435.302  // X
$6 = -1671.848 // Y
$5 = 12.8007   // Z
04E4: unknown_refresh_game_renderer_at $7 $6 
Camera.SetAtPos($7, $6, $5)
062A: change_float_stat 165 to 999.0 
062A: change_float_stat 23 to 999.0 
062A: change_float_stat 21 to 0.0 
062A: change_float_stat 163 to 999.0 
062A: change_float_stat 160 to 999.0 
062A: change_float_stat 229 to 999.0 
062A: change_float_stat 223 to 999.0 
062A: change_float_stat 230 to 999.0 
0629: change_integer_stat 181 to 4 
0629: change_integer_stat 68 to 0 
$PLAYER_CHAR = Player.Create(#NULL, $7, $6, $5)
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group 
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
Camera.SetBehindPlayer
Actor.Angle($PLAYER_ACTOR) = 262.0
set_weather 1 
Player.SetClothes($PLAYER_CHAR, "BBALLJACKRSTAR", "BBJACK", Torso)
Player.SetClothes($PLAYER_CHAR, "JEANSDENIM", "JEANS", Legs)
Player.SetClothes($PLAYER_CHAR, "SNEAKERBINCBLK", "SNEAKER", Shoes)
Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head)
Player.Build($PLAYER_CHAR)
select_interior 0 
Player.CanMove($PLAYER_CHAR) = True
01B7: release_weather 
016C: restart_if_wasted_at $7 $6 $5 angle 0.0 town_number 0 
:MAIN_383
fade 1 1000 
wait 100
04CE: $icon = create_icon_marker_without_sphere 2 at 2458.2483 -1659.0264 13.3047
03BC: $140 = create_sphere_at 2458.2483 -1659.0264 13.3047 radius 2.0
:MAIN_441
wait 2500 
//jump @MAIN_441

:MAIN_420
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 460.0074 -1841.482 radius 2.0 2.0 on_foot  
jf @MAIN_420
03BD: destroy_sphere $140 
fade 0 1000
wait 1000
02A3: enable_widescreen 1
0A48: enable_menu_access_in_widescreen_mode 1 
Player.CanMove($PLAYER_CHAR) = False
Camera.SetPosition(468.8174 , -1848.294, 15.148442, 0.0, 0.0, 0.0)
Camera.PointAt($7, $6, $5, 2)
fade 1 1000
wait 10000

03E6: remove_text_box 
end_thread

Link to comment
Share on other sites

Waarom gaat mijn sphere niet weg?

:MAIN_383
fade 1 1000 
wait 100
04CE: $icon = create_icon_marker_without_sphere 2 at 2458.2483 -1659.0264 13.3047
03BC: $140 = create_sphere_at 2458.2483 -1659.0264 13.3047 radius 2.0
:MAIN_441
wait 2500 
//jump @MAIN_441

:MAIN_420
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 460.0074 -1841.482 radius 2.0 2.0 on_foot  
jf @MAIN_420
03BD: destroy_sphere $140 
fade 0 1000
wait 1000
02A3: enable_widescreen 1
0A48: enable_menu_access_in_widescreen_mode 1 
Player.CanMove($PLAYER_CHAR) = False
Camera.SetPosition(468.8174 , -1848.294, 15.148442, 0.0, 0.0, 0.0)
Camera.PointAt($7, $6, $5, 2)
fade 1 1000
wait 10000

03E6: remove_text_box 
end_thread

Als je goed kijkt zijn de coordinaten van de code

03BC: $140 = create_sphere_at 2458.2483 -1659.0264 13.3047 radius 2.0

en

00ED:   actor $PLAYER_ACTOR 0 near_point 460.0074 -1841.482 radius 2.0 2.0 on_foot

niet hetzelfde.

Trouwens, het is handig als je onder deze code:

016C: restart_if_wasted_at $7 $6 $5 angle 0.0 town_number 0

even deze code zet:

create-thread @MAIN_420

Edited by Revolution-Designer
Link to comment
Share on other sites

Ik heb nu dit alleen gaat hij niet meer uit de cutscene XD

// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
DEFINE OBJECTS 1
DEFINE OBJECT STEVE-M.COM			 

DEFINE MISSIONS 0

DEFINE EXTERNAL_SCRIPTS 0 // Use -1 in order not to compile AAA script

DEFINE UNKNOWN_EMPTY_SEGMENT 0

DEFINE UNKNOWN_THREADS_MEMORY 0

{$VERSION 3.1.0027}

//-------------MAIN---------------
thread 'MAIN' 
fade 0 0 
042C: set_total_missions_to 0 
030D: set_max_progress 0 
01F0: set_max_wanted_level_to 0 
set_wb_check_to 0 
00C0: set_current_time_hours_to 10 minutes_to 0 
$7 = 2435.302  // X
$6 = -1671.848 // Y
$5 = 12.8007   // Z
04E4: unknown_refresh_game_renderer_at $7 $6 
Camera.SetAtPos($7, $6, $5)
062A: change_float_stat 165 to 999.0 
062A: change_float_stat 23 to 999.0 
062A: change_float_stat 21 to 0.0 
062A: change_float_stat 163 to 999.0 
062A: change_float_stat 160 to 999.0 
062A: change_float_stat 229 to 999.0 
062A: change_float_stat 223 to 999.0 
062A: change_float_stat 230 to 999.0 
0629: change_integer_stat 181 to 4 
0629: change_integer_stat 68 to 0 
$PLAYER_CHAR = Player.Create(#NULL, $7, $6, $5)
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group 
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
Camera.SetBehindPlayer
Actor.Angle($PLAYER_ACTOR) = 262.0
set_weather 1 
Player.SetClothes($PLAYER_CHAR, "BBALLJACKRSTAR", "BBJACK", Torso)
Player.SetClothes($PLAYER_CHAR, "JEANSDENIM", "JEANS", Legs)
Player.SetClothes($PLAYER_CHAR, "SNEAKERBINCBLK", "SNEAKER", Shoes)
Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head)
Player.Build($PLAYER_CHAR)
select_interior 0 
Player.CanMove($PLAYER_CHAR) = True
01B7: release_weather 
016C: restart_if_wasted_at $7 $6 $5 angle 0.0 town_number 0 
//create-thread @MAIN_420
:MAIN_383
fade 1 1000 
wait 100
04CE: $icon = create_icon_marker_without_sphere 2 at 2458.2483 -1659.0264 13.3047
03BC: $140 = create_sphere_at 2458.2483 -1659.0264 13.3047 radius 2.0
03E6: remove_text_box 
create_thread @MAIN_420

:MAIN_441
wait 2500 
//jump @MAIN_441

:MAIN_420
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 2458.2483 -1659.0264 13.3047 radius 2.0 2.0 on_foot  
jf @MAIN_420
03BD: destroy_sphere $140 
fade 0 1000
wait 1000
02A3: enable_widescreen 1
0A48: enable_menu_access_in_widescreen_mode 1 
Player.CanMove($PLAYER_CHAR) = False
Camera.SetPosition(468.8174 , -1848.294, 15.148442, 0.0, 0.0, 0.0)
Camera.PointAt($7, $6, $5, 2)
fade 1 1000
00BB: show_text_lowpriority GXT 'THEINF' time 5000 flag 1
0936: set_camera 468.8174 -1848.294 15.148442 position_to 457.8174 -1838.294 15.148442 time 20000 drop_mode 1 
wait 2000 
Camera.SetPosition(457.8174, -1838.294, 15.148442, 0.0, 0.0, 0.0)
wait 10000


end_thread

Link to comment
Share on other sites

Als je de tutorial goed gelezen hebt, moet je weten hoe dat gaat. Je hebt namelijk op het einde van je script nog geen codes om de cutscene uit te gaan.

Link to comment
Share on other sites

  • 1 month later...

Ik had gevraagd om de complete code, maar die gaf je helaas niet. Dan maar afgaan op wat er in je topic staat. Er staan namelijk nogal wat fouten in, en het verbaast me dat het niet crasht!

Kijk ook nog even in mijn vorige post. Er staat heel veel in wat echt niet hoeft worden uitgelegd... Zo hoef je heus niet uit te leggen hoe je iets moet openen/decompileren, iedereen die een cutscene wil maken weet wel hoe die dat moet doen. Anders zit diegene echt in het verkeerde topic.... Ook hoef je het spawnen niet uit te leggen; dat is basis, dat hoeft niet eens veranderd te worden voor een cutscene in Grove Street. Dan dit stuk:

Model.Load(#HYDRA)

:MAIN_383
wait 0
if
  Model.Available(#HYDRA)
else_jump @MAIN_383
$4 = Car.Create(#HYDRA, $7, $6, $5)
036A: put_actor $PLAYER_ACTOR in_car $4

Dat staat dus NIET in de stripped main.scm. Die heb jij er waarschijnlijk zelf ooit ingezet ofzo. Die staat echter zeker niet in de stripped main.scm die je van sannybuilder hebt gekregen (Program Files > Sannybuilder > Data > SA > Stripped). Mensen die deze stripped file gebruiken krabben hier waarschijnlijk aan hun hoofd.

Ook gebruik je overal $ met 1 of een paar getallen, zonder een letter. Er moet altijd minstens 1 letter bij de globals staan, anders kan dat bugs opleveren. Ik weet dat Rockstar dat zelf ook doet, maar als scm coders kunnen we dat helaas niet doen.

Dan komen we aan bij het volgende stukje:

:MAIN_441
wait 2500
//jump @MAIN_441

Het spijt me, maar waar slaat dat in godsnaam op? Je moet een loop in je main thread hebben, zodat je zeker weet dat er altijd minimaal 1 thread loopt, anders heb je goede kans dat het crasht. En wat je op deze manier doet is: er komt een "mannetje" aan die leest de code van de main... Dan komt die bij de create_thread, dus er wordt een nieuw mannetje aangemaakt bij ":MAIN_420". Het huidige mannetje gaat ook door, en komt daar een 2,5 seconden daarachter aan. Dat zie je dus ook in de cutscene, op een gegeven moment als het beeld gaat bewegen, springt hij ineens terug. Dat komt omdat het tweede dan aan komt bij "point at" opcode. Je moet doe // dus gewoon laten staan!

Nu over de plaats van de sphere. Waarom maak je die in de main thread? Als je een bepaalde missie structuur gebruikt, zoals PatrickW ooit uitgelegd heeft in ons tutorial topic, dan kan ik me er nog iets bij voorstellen. Maar op deze manier is het alleen maar raar en onduidelijk. Maak in het vervolg de sphere gewoon aan in de thread van de missie zelf, veel overzichtelijker.

Verder, het is mogelijk om die wait van het faden mooier te maken. Dit is niet noodzakelijk, maar het staat gewoon mooier. :puh: Je kunt namelijk de volgende structuur gebruiken i.p.v. de wait, waardoor het ook zeker is dat dat precies goed loopt:

repeat
 wait 0
until 816B:   not fading

Tot slot: het einde is alles behalve mooi. Daarvoor kan je beter de volgende opcode gebruiken:

02EB: restore_camera_with_jumpcut

Het spijt me dat ik zo kritisch moet zijn, RD. Maar we kunnen geen tutorials zonder op- of aanmerkingen laten staan als die niet helemaal juist zijn; dan doen we daar mensen die het willen leren mee benadelen. Ik waardeer echter je inzet en je wil om anderen te helpen. Hopelijk neem je dit dan ook op als goedbedoelde kritiek, en doe ook jij je voordeel ermee. :)

Link to comment
Share on other sites

Ik had gevraagd om de complete code, maar die gaf je helaas niet. Dan maar afgaan op wat er in je topic staat. Er staan namelijk nogal wat fouten in, en het verbaast me dat het niet crasht!

Was die een na laatste post voor mij? Had ik niet opgemerkt, sorry. :$

Maar om terug te komen op je post, ik leg in het begin al die kleine onnodige dingen uit omdat ik bang ben dat ik te weinig of het niet goed uitleg. Ik wil andere mensen gewoon zo goed mogelijk helpen en daardoor krijg je dus altijd veelte lange tutorials van mij... (En met onnodige fouten :cry: )

Over je commentaar over de stripped main.scm, ik gebruik de main.scm van de mapcleaner van SteveM. Ik wist namelijk (nog) niet dat er een stripped main.scm bij Sannybuilder was meegeleverd.

En of je het nou gelooft of niet, maar ik werk het makkelijkst en het best met zo'n warrig script. Als ik bijvoorbeeld een mod zoals Platform Training maak, dan gaat het me er echt niet om wat andere mensen over mijn script denken, het gaat mij erom dat het werkt en dat andere mensen er met plezier gebruik van kunnen maken.

Het spijt me dat ik zo kritisch moet zijn, RD. Maar we kunnen geen tutorials zonder op- of aanmerkingen laten staan als die niet helemaal juist zijn; dan doen we daar mensen die het willen leren mee benadelen. Ik waardeer echter je inzet en je wil om anderen te helpen. Hopelijk neem je dit dan ook op als goedbedoelde kritiek, en doe ook jij je voordeel ermee. :)

Uiteraard, daar gaat het ook deels om toch?

Cya :cya:

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...