Патч для SimCity 2000 - снятие ограничения в 4Mb оперативки

Все, что не подходит под определение "старого софта и железа", обсуждается здесь
Ответить
MAZter
Advanced Member
Сообщения: 597
Зарегистрирован: 15.12.2019,02:48
Откуда: Москва

Патч для SimCity 2000 - снятие ограничения в 4Mb оперативки

Сообщение MAZter » 23.11.2022,17:27

Приветствую!

Есть ли здесь программисты на Java? Надобно вытащить ресурсы из SimCity 2000 и запихнуть обратно в урезанном виде, чтобы файл занимал меньше места. Итоговая цель, не уверен, что реализуемая - заставить игру работать с 2 мегабайтами оперативки. К примеру на Sega Saturn с 2 мегабайтами оперативки игра работает, если вырезать музыку и звуки, авось запустится? Согласен квест так себе, если есть желающие взяться?

Сам скрипт есть по ссылке ниже, но у меня не вышло разобраться, только с node.js скомпилировало какие-то два файла с классами, а дальше непонятно что с этим делать.

https://blog.krusher.net/en/2017/12/tak ... to-pieces/

sc2000.dat
Последний раз редактировалось MAZter 28.11.2022,06:54, всего редактировалось 2 раза.

MAZter
Advanced Member
Сообщения: 597
Зарегистрирован: 15.12.2019,02:48
Откуда: Москва

Кто-нибудь разбирается в Java?

Сообщение MAZter » 24.11.2022,03:27

update:

нашел распаковщик срипт для QuickBMS, и по идее в нем же можно запаковать обратно


Аватара пользователя
M210
Advanced Member
Сообщения: 370
Зарегистрирован: 22.08.2020,10:42
Откуда: Москва

Вклад в сообщество

Кто-нибудь разбирается в Java?

Сообщение M210 » 27.11.2022,13:36

А что, разве SimCity 2000 написан на Java?
Код, который опубликован вторым постом на Джаву совершенно не похож :)

Аватара пользователя
M210
Advanced Member
Сообщения: 370
Зарегистрирован: 22.08.2020,10:42
Откуда: Москва

Вклад в сообщество

Кто-нибудь разбирается в Java?

Сообщение M210 » 27.11.2022,14:53

Прочитал статейку) Занятный быдлокод конечно :)
Особенно порадовал захардкоженное количество файлов и в самый последний файл просто читается ВЕСЬ остаток dat архива, незадумываясь над тем, что в этом остатке может быть еще 100500 файлов))


Метод swapEndianess в коде тоже улыбнул, а чувак еще пишет, что использует Java повседневно))) Но по его коду я бы сказал, что он написал свою первую программу :))

Пока что выкладываю извлеченные данные этой прогой, посмотри, стоит ли с этим возиться дальше.
Алгоритм запаковки в проге написан так не продуманно, что я не уверен, есть ли от нее польза...проще написать упаковщик заново.

Надеюсь, ничего страшного, что я файлы положил в RAR? :))
Вложения
sc2000.dat!.rar
(988.41 КБ) 36 скачиваний

MAZter
Advanced Member
Сообщения: 597
Зарегистрирован: 15.12.2019,02:48
Откуда: Москва

Патч для SC2000 - снятие ограничения в 4Mb оперативки

Сообщение MAZter » 27.11.2022,22:52

M210 писал(а): 27.11.2022,14:53 Пока что выкладываю извлеченные данные этой прогой, посмотри, стоит ли с этим возиться дальше.
Большое спасибо, но как уже написал ранее, вопрос извлечения был решён с помощью 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 и понимания что во что превращается.
SC2000_2Mb.zip
(850.15 КБ) 49 скачиваний

Ответить