aboutsummaryrefslogtreecommitdiff
path: root/devtools/create_supernova2/create_image/create_image.cpp
diff options
context:
space:
mode:
authorJaromir Wysoglad2019-07-02 19:05:20 +0200
committerThierry Crozat2019-07-28 15:09:14 +0100
commit0e31a6163d6df9a8b7b26b9f50a3a49fe5c7d499 (patch)
tree626c134b338848fef1b20ffbe6ff2abb7f8163c9 /devtools/create_supernova2/create_image/create_image.cpp
parent37c53c420f9a3ccf2bc21de8caea9e0b65edacec (diff)
downloadscummvm-rg350-0e31a6163d6df9a8b7b26b9f50a3a49fe5c7d499.tar.gz
scummvm-rg350-0e31a6163d6df9a8b7b26b9f50a3a49fe5c7d499.tar.bz2
scummvm-rg350-0e31a6163d6df9a8b7b26b9f50a3a49fe5c7d499.zip
SUPERNOVA: Merge create_supernova tools
Diffstat (limited to 'devtools/create_supernova2/create_image/create_image.cpp')
-rw-r--r--devtools/create_supernova2/create_image/create_image.cpp202
1 files changed, 0 insertions, 202 deletions
diff --git a/devtools/create_supernova2/create_image/create_image.cpp b/devtools/create_supernova2/create_image/create_image.cpp
deleted file mode 100644
index 1bf1e24f7c..0000000000
--- a/devtools/create_supernova2/create_image/create_image.cpp
+++ /dev/null
@@ -1,202 +0,0 @@
-#include <fstream>
-#include <iostream>
-#include <sstream>
-#include <cstring>
-#include <iomanip>
-#include <cstdlib>
-
-std::string filenumber;
-
-int writePalette(std::ofstream &output) {
- std::string filename = filenumber + "/palette";
- std::ifstream palette(filename.c_str());
- if (!palette.is_open()) {
- std::cerr << "Couldn't open palette file" << std::endl;
- return 1;
- }
- int input;
- do {
- palette >> input;
- if (palette.eof())
- break;
- output << (char) input;
- } while(true);
- palette.close();
- return 0;
-}
-
-int writeSections(std::ofstream &output) {
- std::string filename = filenumber + "/section_info";
- std::ifstream sectionInfo(filename.c_str());
- if (!sectionInfo.is_open()) {
- std::cerr << "Couldn't open section_info file" << std::endl;
- return 0;
- }
- int numSections;
- sectionInfo >> numSections;
- output << (char) numSections;
-
- int input;
- char *input_byte = (char *) &input;
- for(int i = 0; i < numSections; i++) {
- //x1
- sectionInfo >> input;
- output << (char)input_byte[0];
- output << (char)input_byte[1];
- //x2
- sectionInfo >> input;
- output << (char)input_byte[0];
- output << (char)input_byte[1];
- //y1
- sectionInfo >> input;
- output << (char)input;
- //y2
- sectionInfo >> input;
- output << (char)input;
- //next
- sectionInfo >> input;
- output << (char)input;
- //addressLow
- sectionInfo >> input;
- output << (char)input_byte[0];
- output << (char)input_byte[1];
- //addressHigh
- sectionInfo >> input;
- output << (char)input;
- }
- sectionInfo.close();
- return numSections;
-}
-
-int writeClickFields(std::ofstream &output) {
- std::string filename = filenumber + "/clickfield_info";
- std::ifstream clickFieldInfo(filename.c_str());
- if (!clickFieldInfo.is_open()) {
- std::cerr << "Couldn't open clickfield_info file" << std::endl;
- return 1;
- }
- int numClickFields;
- clickFieldInfo >> numClickFields;
- output << (char) numClickFields;
-
- int input;
- char *input_byte = (char *) &input;
- for(int i = 0; i < numClickFields; i++) {
- //x1
- clickFieldInfo >> input;
- output << (char)input_byte[0];
- output << (char)input_byte[1];
- //x2
- clickFieldInfo >> input;
- output << (char)input_byte[0];
- output << (char)input_byte[1];
- //y1
- clickFieldInfo >> input;
- output << (char)input;
- //y2
- clickFieldInfo >> input;
- output << (char)input;
- //next
- clickFieldInfo >> input;
- output << (char)input;
- }
- clickFieldInfo.close();
- return 0;
-}
-
-int writePixelData(std::ofstream &output, int imageNum, int skip) {
- std::ostringstream fileName;
- fileName << filenumber << "/image" << imageNum << ".bmp";
- std::ifstream image(fileName.str().c_str(), std::ios::binary);
- if (!image.is_open()) {
- std::cerr << "Couldn't open " << fileName.str() << " file" << std::endl;
- return 0;
- }
-
- image.seekg(0, image.end);
- int length = image.tellg();
- length -= skip;
- image.seekg(skip, image.beg);
- char *buf = new char[length];
- image.read(buf, length);
- output.write(buf, length);
- delete buf;
- return length;
-}
-
-void printHelp() {
- std::cout << "create_image output-prefix file-number bytes-skip" << std::endl << std::endl;
- std::cout << " output-prefix: String the created file should begin with" << std::endl;
- std::cout << " file-number: Number of the created file and also name of source folder" << std::endl;
- std::cout << " bytes-skip: How many bytes to to skip in each .bmp file" << std::endl;
- std::cout << std::endl << "EXAMPLE:" << std::endl
- << "create_image ms2_data 15 1146" << std::endl
- << " creates ms2_data.015 assuming there are the right files inside 015 folder" << std::endl;
-}
-
-int main(int argc, char *argv[]) {
- if (argc == 2 && !strcmp(argv[1], "--help")) {
- printHelp();
- return 0;
- }
- if (argc != 4 ) {
- printHelp();
- return 1;
- }
- std::ostringstream oss;
- oss << std::setfill('0') << std::setw(3) << argv[2];
- filenumber = oss.str();
- char *ptr;
- int bytesSkip = strtol(argv[3], &ptr, 10);
- std::string oFileName = argv[1];
- oFileName += "." + filenumber;
- std::ofstream output(oFileName.c_str(), std::ios::binary);
- if (!output.is_open()) {
- std::cerr << "Couldn't open output file" << std::endl;
- return 1;
- }
- // size
- // just a place holder, will be filled later
- output << (char) 0x40;
- output << (char) 0x70;
- output << (char) 0x01;
- output << (char) 0x00;
- if (writePalette(output))
- return 1;
- int numImages = writeSections(output);
- if (numImages == 0)
- return 1;
- if (writeClickFields(output))
- return 1;
- // we don't compress the images, so set to 0
- output << (char) 0; //numRepeat
- output << (char) 0; //numZw
- int totalLength = 0;
- int oldLength = 0;
- for (int i = 0; i < numImages; i++) {
- totalLength += writePixelData(output, i, bytesSkip);
- if (oldLength == totalLength) {
- std::cerr << "Error while reading the image number: " << i << std::endl;
- return 1;
- }
- oldLength = totalLength;
- }
-
- //reversing the size computation inside the engine
- totalLength += 15;
- totalLength /= 16;
- totalLength -= 0x70;
- int i = (totalLength & 0xf000) >> 12;
- int j = totalLength << 4;
- char *i_p = (char *) &i;
- char *j_p = (char *) &j;
-
- //writing the size
- output.seekp(0);
- output << j_p[0];
- output << j_p[1];
- output << i_p[0];
- output << i_p[1];
- output.close();
- return 0;
-}