Приветствую!
Есть ли здесь программисты на Java? Надобно вытащить ресурсы из SimCity 2000 и запихнуть обратно в урезанном виде, чтобы файл занимал меньше места. Итоговая цель, не уверен, что реализуемая - заставить игру работать с 2 мегабайтами оперативки. К примеру на Sega Saturn с 2 мегабайтами оперативки игра работает, если вырезать музыку и звуки, авось запустится? Согласен квест так себе, если есть желающие взяться?
Сам скрипт есть по ссылке ниже, но у меня не вышло разобраться, только с node.js скомпилировало какие-то два файла с классами, а дальше непонятно что с этим делать.
https://blog.krusher.net/en/2017/12/tak ... to-pieces/
sc2000.dat
Патч для SimCity 2000 - снятие ограничения в 4Mb оперативки
Патч для SimCity 2000 - снятие ограничения в 4Mb оперативки
Последний раз редактировалось MAZter 28.11.2022,06:54, всего редактировалось 2 раза.
Кто-нибудь разбирается в Java?
update:
нашел распаковщик срипт для QuickBMS, и по идее в нем же можно запаковать обратно
нашел распаковщик срипт для QuickBMS, и по идее в нем же можно запаковать обратно
- M210
- Advanced Member
- Сообщения: 370
- Зарегистрирован: 22.08.2020,10:42
- Откуда: Москва
-
Вклад в сообщество
Кто-нибудь разбирается в Java?
А что, разве SimCity 2000 написан на Java?
Код, который опубликован вторым постом на Джаву совершенно не похож
Код, который опубликован вторым постом на Джаву совершенно не похож
- M210
- Advanced Member
- Сообщения: 370
- Зарегистрирован: 22.08.2020,10:42
- Откуда: Москва
-
Вклад в сообщество
Кто-нибудь разбирается в Java?
Прочитал статейку) Занятный быдлокод конечно
Особенно порадовал захардкоженное количество файлов и в самый последний файл просто читается ВЕСЬ остаток dat архива, незадумываясь над тем, что в этом остатке может быть еще 100500 файлов))
Метод swapEndianess в коде тоже улыбнул, а чувак еще пишет, что использует Java повседневно))) Но по его коду я бы сказал, что он написал свою первую программу )
Пока что выкладываю извлеченные данные этой прогой, посмотри, стоит ли с этим возиться дальше.
Алгоритм запаковки в проге написан так не продуманно, что я не уверен, есть ли от нее польза...проще написать упаковщик заново.
Надеюсь, ничего страшного, что я файлы положил в RAR? )
Особенно порадовал захардкоженное количество файлов и в самый последний файл просто читается ВЕСЬ остаток dat архива, незадумываясь над тем, что в этом остатке может быть еще 100500 файлов))
Метод swapEndianess в коде тоже улыбнул, а чувак еще пишет, что использует Java повседневно))) Но по его коду я бы сказал, что он написал свою первую программу )
Пока что выкладываю извлеченные данные этой прогой, посмотри, стоит ли с этим возиться дальше.
Алгоритм запаковки в проге написан так не продуманно, что я не уверен, есть ли от нее польза...проще написать упаковщик заново.
Надеюсь, ничего страшного, что я файлы положил в RAR? )
- Вложения
-
- sc2000.dat!.rar
- (988.41 КБ) 36 скачиваний
Патч для SC2000 - снятие ограничения в 4Mb оперативки
Большое спасибо, но как уже написал ранее, вопрос извлечения был решён с помощью QuickBMS, так что эта часть задачи уже как бы выполнена. Но QuickBMS не может нормально запаковать обратно, в их мануале так и написано, что запаковка это экспериментальная функция.
В связи с тем, что в теме давно не было ответов, я решил написать свой рукожопный код на PHP, он делает запаковку идеально удобной - достаточно поместить в папку FILES любые файлы, даже в форматах не совместимых с игрой, и в папке OUTPUT появляется готовый dat файл для скармливания его игре (лишние файлы игра просто игнорирует, порядок загрузки не важен).
У меня получилось сделать в итоге релиз, который запускается с 2250 килобайтами свободной оперативки, но он получается совершенно пустой в плане музыки и звуков, да еще и с ограниченный по зуму (увеличению масштаба в игре до максимума). Релиз для свободных 2.5 мегабайта получше - там нет ограничения по зуму. Так или иначе - цель почти достигнута.
Инструкция примерно такая (может отличаться от последнего релиза, но понятен план вариантов действий):
1) Игра запускается с ключами NO_INTRO NO_MEM_CHK (отпадает необходимость в файле INTRO.RAW и отключаем проверку свободной памяти)
2) TITLE.RAW тоже можно удалить
3) Удаляем *.XMI, оставляем один файл с музыкой 10.XMI и внутри SC2000.EXE правим %d.XMI на 10.XMI
4) Удаляем *.VOC, оставляем один файл со звуком 11.VOC и внутри SC2000.EXE правим %d.VOC на 11.VOC
5) Удаляем PAPER*, оставляем один файл PAPER7 и внутри SC2000.EXE правим PAPER.. на PAPER7.
6) Удаляем TXT*, оставляем один файл TXT11 и внутри SC2000.EXE правим TXT%d. на TXT11
7) Удаляем ABOUT*.RAW, PPDT*.RAW, NEWYRK*.FNT, POP*.RAW
8) Для версии требующей максимум 2Mb удаляются: LARGE.HED и LARGE.DAT (графика для максимального зума) внутри SC2000.EXE правим их в SMALL.HED и SMALL.DAT соответственно
В некоторых случаях если не работает правка SC2000.EXE, можно просто обнулить содержимое файлов TXT, VOC, XMI и некоторых других
Важно, что не все версии игры допускают подобные правки, к примеру DEMO версия, с которой было бы логично начать (она уже не содержит музыки, звуков и всплывающих газет), не позволяет просто так загрузить SMALL.DAT и SMALL.HED два раза через правку SC2000.EXE (как быть в этом случае? если обнулить имя, то начинает ругаться I/O), тогда как полная версия игры этой подмены LARGE на SMALL не замечает.
На мой взгляд для полноценного патча на 2Mb оперативки необходим грамотный подход, дизассемблинг и т.д. что уже не входило в мои планы. В иделе мне бы получить список какие байты менять в SC2000.EXE и что еще можно урезать в файле, для сокращения используемой оперативки.
В аттаче скрипт на php для запаковки, верхняя часть срипта для запаковки не используется, она для отладки при чтении и парсинге sc2000.dat и понимания что во что превращается.