0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 48
1

"Вытащить" изображение скина из старой игры

17.10.2021, 00:38. Показов 968. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не смог определиться куда именно стоит написать данный вопрос - напишу здесь, поскольку связан он с игрой.
Есть относительно старая аркадная игра - Heroes Of The Pacific. Там у самолётов от уровня прокачки меняются характеристики а также скин самого самолёта. Так вот, там есть самолёт, скин которого мне очень нравится и я бы хотел заиметь исходник этого скина в виде отдельной картинки.
Подскажите, как это сделать? Можно ли вообще как-то "вытащить" эту картинку? Хотел написать на биржу фриланса, но не понял, к какому разделу можно отнести такое предложение. Подскажите, куда стоит написать и хватит ли каких-нибудь 500руб или же это тяжело сделать и таким деньгами не обойтись?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2021, 00:38
Ответы с готовыми решениями:

Ошибка "Present frame failed" во время игры в "Путь воина"
Во время игры выскакивает маленькое окошко поверх картинки с надписью"Present frame failed". Под...

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

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

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д
Нужен код игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д. Или ссылки на...

Создать иерархию классов "нота", "звук", "изображение"
Класс " нота" : название, октава , продолжительность звучания. 2. Производные : " звук" (частота )...

1
Модератор
Эксперт Java
2473 / 1028 / 352
Регистрация: 11.08.2017
Сообщений: 3,172
19.10.2021, 21:17 2
Выложу тут мои попытки вытаскивания
CMakeLists.txt
Код
cmake_minimum_required(VERSION 3.21)
project(hop_exctractor)

set(CMAKE_CXX_STANDARD 17)

add_executable(hop_exctractor main.cpp)
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <filesystem>
#undef NDEBUG
#include <cassert>
 
struct info{
    uint32_t size;
    char name[100];
    uint32_t offset;
};
 
const int ALIGN = 512;
 
std::string getPath(const std::string &path) {
    size_t found{path.find_last_of("/\\")};
    return path.substr(0,found);
}
 
void createDir(const std::string &path) {
    std::filesystem::create_directories(getPath(path));
}
 
uint32_t getFileSize(std::ifstream &file) {
    file.seekg(0, std::ios::end);
    uint32_t s{static_cast<uint32_t>(file.tellg())};
    file.seekg(0, std::ios::beg);
    return s;
}
 
int main() {
    std::vector<info> records{};
    assert(sizeof(info) == 108 && "invalid struct size");
 
    std::string fname{"direct.bin"};
    std::string outfold{"out/"};
 
    std::ifstream file{fname, std::ios::binary};
    assert(file.is_open() && "error open header file");
    while (!file.eof()) {
        info rec{};
        file.read(reinterpret_cast<char*>(&rec), sizeof(info));
        records.push_back(rec);
    }
    file.close();
 
    std::ofstream inf{"info.txt"};
    inf << "offset ??? name" << std::endl;
    for (auto &r : records) {
        //inf << std::dec << r.offset << " 0x" << std::hex << r.size << " " << r.name << std::endl;
        inf << r.offset << " " << r.size << " " << r.name << std::endl;
    }
    inf.close();
 
    fname = "Heroes.dt3";
    file.open(fname, std::ios::binary);
 
    records[records.size() - 1].offset = getFileSize(file) + ALIGN; //fix latest file size
 
    for (int i = 0; i < records.size() - 1; i++) {
        std::string name{records[i].name};
        createDir(outfold + name);
        std::ofstream out{outfold + name};
        int size{static_cast<int>(records[i + 1].offset - records[i].offset - ALIGN)};
        file.seekg(records[i].offset, std::ios::beg);
        char *data = new char[size];
        file.read(data, size);
        out.write(data, size);
        delete [] data;
        out.close();
    }
    file.close();
    return 0;
}
И пару слов о структуре всего.
Как типичные игровые архивы здесь разбиение на 2 файла, один (direct.bin) это заголовки, которые содержат неизвестное число (не совпадает ни с размером ни с чем-то еще логичным), имя и смещение во втором файле (Heroes.dt3), который из себя представляет последовательность файлов без сжатия с мусорными блоками по 512 байт (начиная с мусора).
Могу приложить бинарник, запускается из папки с указанными файлами (direct.bin Heroes.dt3) и результат в папке out. В игре огромное количество csv файлов, есть xls и txt, которые извлекаются без проблем. А вот с png засада, они извлекаются битые, у них как минимум в заголовках лишние байты 0D, в некоторых их удаление помогает, в некоторых нет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2021, 21:17
Помогаю со студенческими работами здесь

Как написать регулярное выражение для выдергивания английских букв и символов: "+", ",", ":", "-", " ", "!", "?" и "."
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и...

Для каждой проведенной игры напечатать словесный результат: "выигрыш", "ничья'' или "проигрыш"
6. Даны два массива из 20 однозначных чисел. В первом из них записано количество мячей, забитых...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

Как вытащить "src" из тега "img" через BeautifulSoup
Всем привет. Искал долго, но решения так и не нашёл. Есть такой код, он выводит все теги img со...

Получить значение из {"text1":"val1","text2":"val2","text3":{"text":"val"}}
Есть такая строка var my = '{&quot;text1&quot;:&quot;val1&quot;,&quot;text2&quot;:&quot;val2&quot;,&quot;text3&quot;:{&quot;text&quot;:&quot;val&quot;}}'; Как из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru