Hej :)
Obecnie każdy średnio i bardziej zaawansowany użytkownik GM:Studio wie, że jak się robi grę, trzeba sobie zainicjować wszystkie zmienne globalne, które są potrzebne w grze (np. odpowiedzialne za progres/wynik gry, opcje, poziom trudności itp.).
Najlepszym znanym nam sposobem do tej pory było stworzenie pustego roomu, a w nim albo dodanie obiektu ze skryptem, albo "room creation code", w którym to skrypcie jest inicjacja wszystkich zmiennych i na sam koniec room_goto_next(); Następnie do tego roomu już nigdy nie wracamy, a że wyświetla się tylko jedną klatkę, to go z reguły nie widać (najlepiej jeszcze dać czarne tło). Niestety, jak zrobimy game_restart() to te skrypty się wykonują ponownie, a jeśli używamy np. jakiegoś DLLa, albo doczytywania spritów z pliku, to trochę nam to nie na rękę. Trzeba samemu zaprogramować grę tak, żeby resetowała potrzebne zmienne i wracała do drugiego w grze roomu.
ALE - JEST ROZWIĄZANIE!!!!
Tworzymy dowolny skrypt inicjujący grę. Teraz w dowolnym skrypcie w dowolnym miejscu (ale sugeruję na górze tego inicjującego), wpisujemy:
GML
gml_pragma("global", "nazwa_skryptu()");
I to wszystko. Ten skrypt zostanie wykonany jeszcze przed eventem Game Start, a jak zrobicie game_restart() to już go nie wykona. gml_pragma nie jest fukcją, a poleceniem dla kompilera, żeby ten skrypt wykonać przed rozpoczęciem właściwej pętli gry GM:Studio :)
Można dać kilka skryptów w ten sam sposób, kolejność wykonania zależy zapewne od kolejności w resource tree a potem od linijki w kodzie. Polecenie wywołujące skrypt nie musi być w tym samym skrypcie, chociaż jest to najczytelniejsze :)