Начинать новую игру не надо?
Эта статья взята с самого большого форума Grand Theft Auto - www.gtaforums.com и переведена мною на русский язык. Данная статья будет очень полезна опытным скриптёрам, в ней я расскажу, как делать скриптовые моды и при этом не начинать новую игру! Это действительно так, по началу мне то же в это не верилось, но после того, как я решился попробовать поставить запаркованную машину скриптом, предварительно зделав всё, что написано в статье, я был готов после загрузки игры увидеть это, уже ничем не способное удивить меня, сообщение об ошибке, но вместо этого игра спокойно загрузилась, я оказался в доме CJ'я на Grove Street и вышел во двор! И как вы думаете чего я увидел??? То самое авто, которое я поставил по середине площадки! Это действительно реально - написать скрипт и при этом не начинать новую игру!!!
Теперь попробуем разобраться, как сделать такую фичу к себе в игру. Комментировать особо все действия не буду так как на самом деле там нет ничего интересного, просто заменять или добавлять строки в main.scm, сначала нам следует изменить главный поток игры, так как он идёт до начала и начинает основную (вторую) миссию, поэтому мы должны поставить туда проверку, котрая будет препятствовать этому действию (начинать вторую миссию). Делается это так, сперва ищем 3 строки: :MAIN_392
0001: wait 0 ms
00D6: if 0
Сразу после них, подчёркиваю СРАЗУ, независимо от того, что там идёт, добавляем вот эти четыре строки: 0038: $24 == 1 ;; integer values
004D: jump_if_false ЈЈMAIN_392
0417: start_mission 2 ; Originally:
0002: jump ЈЈMAIN_392
И следующее, что нам надо сделать, это закомментировать следующие 4 строчки (т.е. поставить символ ";" вначале строки).
Стандартный кусокОтредактированный кусок
Теперь нам следует добавить проверку в поток второй миссии. Зачем? Он будет проверят равна ли та переменная нулю, если не равна, то игра пойдёт обычным путём, т.е. будет загружать стандартный файл main.scm, с которым вы играли раньше, а если равна, то пойдёт чтетиние нашего скрипта, а потом загрузка стандартного кода. Поэтому ищем самое начало миссии 2: ;-------------Mission 2---------------
; Originally:
Таким образом мы создали один поток под названием NAME_THREAD, с этим названием и будет наш поток на mission 0, т.е. наш мод! Просто всё отличие в том, что мы создали поток в этой части мэйна, а не там где обычно (в верхней части, где идёт перечисление всех потоков). Чтобы создать не один а больше потоков, надо прибавить к переменной $120 единицу и создать ещё один thread, смотрите изображение.
Создание одного потокаСоздание трёх потоков
Следующим шагом в процесса является добавление нашего мода над строкой mission 0, я думаю все знают как это делается, только название потока, как я говорил уже должно совпадать! Скажу чесно я пробовал создать только один поток, сначала я здел просто запаркуованный авто, а потом решил впихнуть туда спидомет! И что вы думаете? На моё удивление всё работает! Скрин в конце. Но есть одно "НО", все переходы (jump) должны быть в пределах вашего мода! Т.е. если где-нибудь вы напишите скрипт и в нём будет команда 0002: jump JJMAIN_414 то будет ошибка, так как лэйбл MAIN_414 находится в стандартной ветке файла, которую трогать нельзя (если вы конечно хотите чтобы ваш сейф загрузился), поэтому ещё раз говорю, ВСЕ переходы должны быть внутри вашего потока!
Один потокТри потока
И послдняя часть работы заключается в том чтобы перенести одну строчку чуть выше, чем она была, ищем строку :INTRO_924 и переносим прыжок, который написан в конце, в самое начало блока! Смотрите изображение:
До редактированияПосле редактирования
На этом всё! Что касается создания таким способом миссии, не знаю но вполне возможно, что работать будет! Последнее что хочу сказать, для редактирования мэйна таким способом, нужен свежий, чистый main.scm от игры! Т.е. установили игру, раскомпилировали main, отредактировали, закомпилировали и запустили игру! Только так! Редактируйте, эксперементируйте, творите!