Очень непонятная проблема в Асатаме II

Очень непонятная проблема в Асатаме II

Приветствую! Не подуймайте, что я годами вишу над одной своей игрой, но я опять о ней, так уж вышло))
Недавно опять запустил, попробовал поиграть, после последнего обновления вроде как багов практически и нет, но тут один вдруг обнаружился.
Я не особо надеюсь, что помочь возможно, потому что слишком все непонятно, да и код запутанный, но попытаюсь объяснить (и все-таки немножко надеюсь, что поможете))

Ошибка появляется после того как игрок прокачивает навык "Доспехов" (sk_arm) выше трех.
А именно появляется загадочная цифра 55. Она с тех пор есть в любых локациях - всегда ниже на несколько отступов от основного текста.
Обстоятельство осложняется тем, что это происходит только в одном игровом сеансе. Когда я начал новую игру и затестил - просто повышая навык с помощью читов - этого уже не произошло.
Я сделал поиск по всему коду на слово sk_arm и не нашел ничего, что могло бы привести к появлению цифры 55. Да и не так часто это слово встречается.
Поискал и на сочетание 55 - тоже ничего особенного.
У меня было подозрение на локацию newlock - в ней содержится плашка со здоровьем, стаминой и прочим, которая всегда высвечивается сверху. Ведь 55, также высвечивается везде и всегда... но и в локации newlock не нашел ничего подозрительного.
Вообще теряюсь в догадках.
Как вообще возможно решить подобную проблему?
Даже могу дать код для открытия игра в qgene - 616
Но там, наверное, трудно будет разобраться постороннему... эх)

mkir
useravatar
Offline
140 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Очень непонятная проблема в Асатаме II

mkir,
Много переменных в игре? Есть вариант, когда появится 55, с помощью отладчика проверить, какой переменной присвоено это значение, затем поискать команды, которые выводят значения этой переменной. Похоже на то, что где-то осталась строка, с помощью которой ты выводил значения на экран во время отладки. Либо: где-то забыл присвоить значение выражения переменной. Это будет отловить сложнее. Надо просматривать весь задействуемый во время бага код на такое вот выражение.

UPD^
О. Я нашёл ошибку. Локация newloc строка 96. Вместо resist+=20 написано resist+20. Как раз при условии sk_arm>2.

Aleks Versus
воздвигатель башни
useravatar
Offline
1490 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Очень непонятная проблема в Асатаме II

О, а ларчик, как всегда, открывался просто) Спасибо большое, я должен был это заметить сам, но проглядел. Большое спасибо!

Но пока еще все равно неясно, почему ошибка выдает именно такой результат. Почему условие "на ошибку" сработало только в одной игре, а в другой раз при повторении условия ничего не произошло. И почему именно 55 и именно на несколько абзацев ниже) попробую еще покопаться. А отладчиком еще не умею пользоваться, не пробовал

UPD - нашел второе условие для ошибки. значит их два - 1) sk_arm > 2 ;2) надетая броня на персонаже ;3) и скорее всего деле в предмете "Тога некроманта" - любая другая броня ошибки не выдает. Она действительно отличается от любых других типов, потому что вместо штрафа к увороту дает бонус к нему же. В общем, разгадка близка

UPD 2 - Разобрался окончательно! Тога некроманта дает 30 к сопротивлению магии, навык ношения брони дает еще 20 при условии если у брони и так уже есть около 30, уровень сложности дает еще 5. Условие - по нужной броне и навыку срабатывает и нам всегда показывают текущий уровень нашего сопротивления. В меню навыков сопротивление отображалось как 35, поэтому я и не нашел загадочную цифру 55, чтобы понять отчего она зависит. Не отображалось, потому что в newloc сначала просчитывается общее сопротивление игрока, а бонус от брони уже идет после и не выводится в других менюшках

mkir
useravatar
Offline
140 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Очень непонятная проблема в Асатаме II

mkir написал(а):

А отладчиком еще не умею пользоваться

ну, у тебя в игре уже есть своеобразный микроотладчик. Правда на мой вкус несколько неудобный. Ввести в поле ввода слово "чит" потом команду в окошко input. Я бы сделал так:

Код:

if $USER_TEXT = 'Тестовый режим':

    ! код тестового режима
else
    dynamic $USER_TEXT
end

И любую строку кода можно вводить прямо в поле ввода.
Можно добавить проверку ряда переменных:

Код:

if $USER_TEXT = 'Тестовый режим':

    ! код тестового режима
elseif $USER_TEXT='VARS':
    pl "sk_arm <<ak_arm>>"
    ! и т.д.
else
    dynamic $USER_TEXT
end

Ну и всячески адаптировать для себя.

Aleks Versus
воздвигатель башни
useravatar
Offline
1490 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
972
Всего опросов:
14
Всего сообщений:
16790580
Сообщений на этой неделе:
2
Пользователи форума:
 
Всего пользователей:
2364
Последним зарегистрировался:
dmvikar