You are not logged in.
Здравствуйте.
Я пытаюсь модифицировать GTA San Andreas.
Пожалуйста, подскажите, как можно отредактировать main.scm чтобы отключить Бесконечные патроны при 100% прохождении игры?
Если можете посоветовать уже существующий мод, было бы здорово тоже.
С помощью Sanny Builder я не смог найти переменных или логических проверок, которые я бы мог изменить, чтобы получить желаемый результат.
Бесконечные патроны все портят... Это делает игру скучной, когда не нужно вкладывать деньги в оружие.
Да, я знаю, что с редактором файлов сохранений, я бы мог снизить свой процент после прохождения, но мне хотелось бы этого не делать (к тому же, мне нравится видеть 100% в своей статистике).
Дело в том, что я пытался сделать игру более сложной (и сделать зароботок денег более важным).
Я нашел, как можно отредактировать main.csm с помощью Sanny Builder (плюс редактирование shopping.dat),
чтобы сделать деньги более важными для прохождения игры.
Я даже нашел мод, который ограничивает количество патронов (вместо 9999 или более).
Если бы я только мог отключить этот бонус Бесконечных патронов, это было бы идеально.
Offline
Update.
Пока что мне удалось реализовать снижение процента прогресса без надобности редактировать файл сохранения игры!
Это намного предпочтительнее, но не идеально (я не хотел что-то изменять в процентах прогресса, если можно по-другому это сделать).
Недостаток подобной реализации в том, что в статистике будет указано 99.47% прогресса, после выполнения всех заданий в игре.
Но хорошо, что игрок так же будет получать сообщение о 100% прохождении игры, и все другие бонусы (деньги, статы, Танк и Гидру возле дома СиДжея).
И при этом вы не получите никаких бесконечных патронов! То что нужно!
(Я уже начинаю подозревать, что включение этого бонуса встроено в исполняемый файл игры. Но я надеюсь, что это не так!)
Если кому-нибудь интересно, как я реализовал этот способ, при котором не будет Бесконечных патронов
(в статистике будет отображаться 99.47% после 100% прохождения игры),
я покажу что нужно изменить в файле main.scm с помощью Sanny Builder.
Естественно, так как изменяется файл "main.scm", придется начать новую игру!
(Если же вы захотите добиться этого в уже пройденной игре, проще всего и правда найти редактор файлов сохранений, где можно поменять цифру 187 на 188 для требуемых задач (а уже выполненные задачи оставить на 187)).
Я протестировал все, с помощью этого кода (впременно добавив его на зацикленное исполнение)
030C: progress_made = 1
достаточно раз, чтобы симулировать выполнение всех 187 отдельных задач в игре (каждая увеличивает процент прогресса на одинаковое значение).
А теперь, что конкретно изменить, чтобы отвключить бонус Бесконечных патронов:
В данной секции кода нужно изменить значение для "set_max_progress":
//-------------MAIN--------------- thread 'MAIN' fade 0 0 042C: set_total_missions_to 147 030D: set_max_progress 187 0997: set_total_respect_points_to 1339
Нужно изменить его на 188 вот так:
030D: set_max_progress 188
В данной секции кода нужно изменить значение в условии для "$STAT_PERCENTAGE_COMPLETED":
:COLLS_832 if $_100_PERCENT_COMPLETE == 0 else_jump @COLLS_994 if $STAT_PERCENTAGE_COMPLETED >= 100.0 else_jump @COLLS_994
Нужно изменить его на 99.3 вот так:
:COLLS_832 if $_100_PERCENT_COMPLETE == 0 else_jump @COLLS_994 if $STAT_PERCENTAGE_COMPLETED >= 99.3 else_jump @COLLS_994
Примечание:
Иногда Sanny Builder показывает "jf" вместо "else_jump" при редактировании кода, но это выполняет ту же функцию.
Offline
Тебе нужно "занопить" два байта по адресу 007428DF, чтобы игра игнорировала результат проверки на 100% прохождение игры.
Как-то так
0A8C: write_memory 0x7428DF size 2 value 0x9090 virtual_protect 1
Иногда Sanny Builder показывает "jf" вместо "else_jump" при редактировании кода, но это выполняет ту же функцию.
в keywords.txt для опкода 004D объявлено 2 алиаса: jf и else_jump и, в зависимости от сортировки списка, может использоваться любой из них (тот, что оказался первым). Оба алиаса равнозначны.
Offline
Тебе нужно "занопить" два байта по адресу 007428DF, чтобы игра игнорировала результат проверки на 100% прохождение игры.
Как-то так
0A8C: write_memory 0x7428DF size 2 value 0x9090 virtual_protect 1
Благодарю.
Но не работает...
Я попробовал вставить строку и внутрь CLEO мода на лимит патронов (в следующую строку после {$CLEO .cs})
Я попробовал вызывать ее в разных местах в main.scm где она точно вызывается. Но как только прогресс устанавливается на 100%, бесконечные патроны включаются (вызывал ее и после достижения 100%).
(Кстати, удвоенная защита транспорта, что в два раза меньше здоровья тратится, тоже включается по достижении 100%. Так что при потере бонуса бесконечных патронов, тот бонус тоже теряется, но это не слишком важно)
Может нужно как-то специфически ту строку использовать?
Last edited by InvisibleMan (09-03-2020 23:30)
Offline
Только сейчас получилось посмотреть, в чем там дело. В общем, чтобы отключить бесконечные патроны, нужно использовать такие команды:
// disable unlimited ammo on foot 0A8C: write_memory 0x7428DF size 1 value 0xEB virtual_protect 1 // disable unlimited ammo in car - drive-by 0A8C: write_memory 0x73FAAD size 1 value 0x90 virtual_protect 1 0A8C: write_memory 0x73FAAE size 1 value 0x90 virtual_protect 1
адреса для версии 1.0. для стрельбы пешком и для стрельбы из окон машины есть две похожие функции, в каждой из которых отдельно проверяется прохождение игры на 100%.
тестировал на таком SCM файле:
var $PLAYER_CHAR: Player end // var 03A4: name_thread 'MAIN' 01F0: set_max_wanted_level_to 6 0111: toggle_wasted_busted_check 0 00C0: set_current_time_hours_to 8 minutes_to 0 04E4: unknown_refresh_game_renderer_at 2488.56 -1666.84 03CB: set_rendering_origin_at 2488.56 -1666.84 13.38 0053: $PLAYER_CHAR = create_player #NULL at 2488.56 -1666.84 13.38 01F5: $PLAYER_ACTOR = create_player_actor $PLAYER_CHAR 07AF: $PLAYER_GROUP = player $PLAYER_CHAR group 0373: set_camera_directly_behind_player 01B6: set_weather 0 0001: wait 0 ms 087B: set_player $PLAYER_CHAR clothes_texture "PLAYER_FACE" model "HEAD" body_part 1 087B: set_player $PLAYER_CHAR clothes_texture "JEANSDENIM" model "JEANS" body_part 2 087B: set_player $PLAYER_CHAR clothes_texture "SNEAKERBINCBLK" model "SNEAKER" body_part 3 087B: set_player $PLAYER_CHAR clothes_texture "VEST" model "VEST" body_part 0 070D: rebuild_player $PLAYER_CHAR 01B4: toggle_player $PLAYER_CHAR can_move 1 016A: fade 1 time 0 04BB: select_interior 0 0629: change_integer_stat 181 to 4 016C: restart_if_wasted_at 2027.77 -1420.52 15.99 angle 137.0 town_number 0 016D: restart_if_busted_at 1550.68 -1675.49 14.51 angle 90.0 town_number 0 0180: set_on_mission_flag_to $ONMISSION // Note: your missions have to use the variable defined here 0004: $DEFAULT_WAIT_TIME = 250 03E6: remove_text_box #MICRO_UZI.Load() 038B: load_requested_models // put your create_thread commands here 062A: change_float_stat 0 to 50.0 062A: change_float_stat 1 to 50.0 01B2: give_actor $PLAYER_ACTOR weapon 28 ammo 50 // Load the weapon model before using this // disable on foot 0A8C: write_memory 0x7428DF size 1 value 0xEB virtual_protect 1 // disable in car 0A8C: write_memory 0x73FAAD size 1 value 0x90 virtual_protect 1 0A8C: write_memory 0x73FAAE size 1 value 0x90 virtual_protect 1 //0A8C: write_memory 0x73FAAD size 2 value 0x9090 virtual_protect 1 :MAIN_LOOP 0001: wait $DEFAULT_WAIT_TIME ms 00BF: $TIME_HOURS = current_time_hours, $TIME_MINS = current_time_minutes 0002: jump @MAIN_LOOP
P.S. почему-то не получилось использовать
0A8C: write_memory 0x73FAAD size 2 value 0x9090 virtual_protect 1
с этой командой игра вылетает. но если "занопить" каждый из двух байтов отдельно, как в примере выше, все работает.
Offline
есть еще нюанс. игра не отображает количество патронов, когда их больше 9999 в запасе. может сложиться впечатление, что патроны не уменьшаются, но на самом деле это не так.
Offline