#1 29-02-2020 13:05

InvisibleMan
Registered: 29-02-2020
Posts: 5

Как отключить бонус Бесконечных патронов при 100% прохождении?

Здравствуйте.
Я пытаюсь модифицировать GTA San Andreas.

Пожалуйста, подскажите, как можно отредактировать main.scm чтобы отключить Бесконечные патроны при 100% прохождении игры?

Если можете посоветовать уже существующий мод, было бы здорово тоже.

С помощью Sanny Builder я не смог найти переменных или логических проверок, которые я бы мог изменить, чтобы получить желаемый результат.

Бесконечные патроны все портят... Это делает игру скучной, когда не нужно вкладывать деньги в оружие.

Да, я знаю, что с редактором файлов сохранений, я бы мог снизить свой процент после прохождения, но мне хотелось бы этого не делать (к тому же, мне нравится видеть 100% в своей статистике).

Дело в том, что я пытался сделать игру более сложной (и сделать зароботок денег более важным).
Я нашел, как можно отредактировать main.csm с помощью Sanny Builder (плюс редактирование shopping.dat),
чтобы сделать деньги более важными для прохождения игры.

Я даже нашел мод, который ограничивает количество патронов (вместо 9999 или более).

Если бы я только мог отключить этот бонус Бесконечных патронов, это было бы идеально.

Offline

#2 29-02-2020 16:15

InvisibleMan
Registered: 29-02-2020
Posts: 5

Re: Как отключить бонус Бесконечных патронов при 100% прохождении?

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

#3 08-03-2020 19:28

Seemann
Registered: 07-08-2006
Posts: 2,076

Re: Как отключить бонус Бесконечных патронов при 100% прохождении?

Тебе нужно "занопить" два байта по адресу 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

#4 09-03-2020 23:20

InvisibleMan
Registered: 29-02-2020
Posts: 5

Re: Как отключить бонус Бесконечных патронов при 100% прохождении?

Seemann wrote:

Тебе нужно "занопить" два байта по адресу 007428DF, чтобы игра игнорировала результат проверки на 100% прохождение игры.

Как-то так

0A8C: write_memory 0x7428DF size 2 value 0x9090 virtual_protect 1

Благодарю.

Но не работает... sad

Я попробовал вставить строку и внутрь CLEO мода на лимит патронов (в следующую строку после {$CLEO .cs})

Я попробовал вызывать ее в разных местах  в main.scm где она точно вызывается. Но как только прогресс устанавливается на 100%, бесконечные патроны включаются (вызывал ее и после достижения 100%).

(Кстати, удвоенная защита транспорта, что в два раза меньше здоровья тратится, тоже включается по достижении 100%. Так что при потере бонуса бесконечных патронов, тот бонус тоже теряется, но это не слишком важно)

Может нужно как-то специфически ту строку использовать?

Last edited by InvisibleMan (09-03-2020 23:30)

Offline

#5 31-03-2020 01:14

Seemann
Registered: 07-08-2006
Posts: 2,076

Re: Как отключить бонус Бесконечных патронов при 100% прохождении?

Только сейчас получилось посмотреть, в чем там дело. В общем, чтобы отключить бесконечные патроны, нужно использовать такие команды:

// 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

#6 31-03-2020 01:20

Seemann
Registered: 07-08-2006
Posts: 2,076

Re: Как отключить бонус Бесконечных патронов при 100% прохождении?

есть еще нюанс. игра не отображает количество патронов, когда их больше 9999 в запасе. может сложиться впечатление, что патроны не уменьшаются, но на самом деле это не так.

Offline

Board footer

Powered by FluxBB