SAの処理の流れ

Last-modified: 2015-05-03 (日) 18:45:16

GTA:SAでは、SCMの処理以外も含めて、全て一つのスレッドで行っています。

ですから、SCMのどこかのスレッドで無限ループに入るとスクリプトはもちろん、
GTA:SA自体もフリーズしてしまいます。

しかし、殆どのスレッドは入力待ちなどでループをする必要があります。

:GETKEY
00D6: if
00E1: player 0 pressed_key 19
004D: jump_if_false @GETKEY
SCMで無限ループに入ると入力処理も行われないので
この例では必ずフリーズします。

:GETKEY
0001: wait 0 ms
00D6: if
00E1: player 0 pressed_key 19
004D: jump_if_false @GETKEY
Opcode 0001を使うことでスレッドは相対的に次回のスレッド起動時間を
指定して、次のスレッドへ処理を渡します。

全てのスレッドで0001が実行されるとSCMの処理から抜け、
次の描画処理に移ります。