Краткий вопрос.
Я тут переделал save/restore механизм, дабы всё что нужно умещалось, "сжималось" и вообще приносило радость.
Чтобы .sav-файлы не выглядели так по-ублюдски (и было легче отлаживать), я убрал HashString() и вместо него запилил простой непрерывный список строк.
Вопрос: движок ХЛ не сломается от этого?
PS: hazardous course теперь сохраняется со всеми стволами и патронами, кучами снарядов, кусков и прочего рандома.
PS2: алгоритм хэшрования и записи - это вообще "веселье". Пока разберёшься что, зачем и к чему прибавляется и куда циклируется - рехнёшься без специальных проф.резистов.
Если от отсортированного delta.lst не сломался, то тут думаю всё будет хорошо
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
~ X ~ Любые слова можно воспринимать как угодно, вне зависимости от того, чем они являются на самом деле.
Лимит на уникальные строки - 4095 штук. Посчитай, сколько записал ты.
Дядя Миша и что же должно сломаться? Количество строк не изменится. А на порядок строк в savedata, судя по всему, халве вообще пофиг. В данный момент у меня всё работает, но есть какой-то странный глюк с положением декалей, которые пишутся движком. Собственно, из-за него всё это и переписывал.
Раз ты эту тему создал - значит не вполне понимаешь что ты сделал. Вот и боишься что что-нибудь сломается
Угадать что именно сломается при порче памяти сложно. Халфовский менеджер никак за ней не следит, поэтому лезут необъяснимые глюки, которые ты дебажишь уже 17 лет.
Дядя Миша я просто спросил - ДВИЖОК В ХАЛВЕ ДЕЛАЕТ ХЭШИ ИЛИ НЕТ?
Я заменил index = HashString(string) на index = FindOrAddString(string); всё. Ибо уже достало в sav-файлах наблюдать рандомную блевотину из пробелов и кусков говна. Я хочу узнать, кто-то кроме гаме.длл будет это говно читать или нет? Будут пытаться хэши сверять или нет? Я такого кода не нашёл, но решил уточнить. Вдруг "авторитетный рдач" знает.
Добавлено 14-12-2018 в 12:05:
Цитата:
XaeroX писал: Что такое "простой непрерывный список строк"?
Ты дубликаты как сохраняешь?
Линейный поиск?
Я правильно понимаю, что ты разоптимизировал код ради красоты бинарного файла?
Условно-да. Там циклический поиск свободных "хэш-индексов". Там было так:
- считается хэш строки инт32
- режется до инт16
(хотел тут расписать всё, но лучше оставлю так. если так интересно - сами код почитаете. делюсь кайфом от ковыряния в говне в коде. возможно, тогда придет понимание того, зачем это уничтожать убирать под дефайн)
....
- в свободное место пишется строка
по сравнению с этим, поиск свободного места при куче совпадений - пустяковая нагрузка.
~ X ~ писал: по сравнению с этим, поиск свободного места при куче совпадений - пустяковая нагрузка.
Давай вообразим ситуацию, что нам нужно сохранить сотню специализированных энтитей, у которых есть поле "m_iszXWider". До этих энтитей мы уже сохранили 1000 других строк от предыдущих энтитей. Допустим, хэш строки "m_iszXWider" указал на занятое поле, но через 2 поля - уже свободное. Тогда с хэшем мы имеем 100 вычислений хэша и 2*100=200 strcmp. А с линейным поиском мы имеем 0 вычислений хэша и 1000*100=100000 strcmp. Ты правда думаешь, что это пустяковая разница?
XaeroX я не хочу отнимать у тебя радость задротства, но лучше поищи тему где ДМ доказывал, что strcmp это никакая нагрузка. мне.
Здраво говоря, тебе реально больше хотелось потрепаться, чем отвечать на вопрос.
save/restore происходит единовременно при сохранении или смене карты. при этом появляется надпись saving/loading. при этом самая дорогая операция - запись на диск. при этом всё равно время сохранения в современном мире ничтожно. при этом на фпс в самой игре влияния нет. при этом хотя бы обесечивается лучшее сжатие сейвов, читабельность кода и стабильность алгоритма. И - да, не нравится - форкай и пиши по-другому. Хотя даже форкать не надо - собрать с другим флагом.
~ X ~ писал: Здраво говоря, тебе реально больше хотелось потрепаться, чем отвечать на вопрос.
Мне не нравится, когда под соусом "очевидного" подают далеко не очевидные вещи.
Цитата:
~ X ~ писал: save/restore происходит единовременно при сохранении или смене карты. при этом появляется надпись saving/loading.
Я очень люблю квиксейвиться, и мне нравится, что на современном железе в халфе это происходит мгновенно. И мне не не нравится, что кто-то хочет заменить 200 вызовов функции на 100000, замедлив хотя бы часть процесса в 500 раз.
Цитата:
~ X ~ писал: при этом самая дорогая операция - запись на диск.
Это в эпоху SSD-то? Запись сотни килобайт - самая дорогая операция?
Цитата:
~ X ~ писал: при этом хотя бы обесечивается лучшее сжатие сейвов, читабельность кода и стабильность алгоритма.
Насколько лучше будет сжатие твоих сейвов? Можешь показать какую-то статистику?
Про читабельность кода и стабильность алгоритма я вообще не понял пассаж. Почему ты считаешь код классического хеширования с линейным разрешением конфликтов менее читабельным, чем код линейного поиска? Чем последний алгоритм стабильнее первого?
Цитата:
~ X ~ писал: И - да, не нравится - форкай и пиши по-другому.
Я пытаюсь понять, чем это нравится тебе.
Пока - безуспешно.
XaeroX во ты занудил. тут человек вальвокод отлаживает, а тебе прям чешется чужую мотивацию прочувствовать ) когда уже две строчки в ДЖЕК допишешь? У меня уже денег на донаты не останется скоро.