neige d'aoust

knowledge, art, and other stuff

User Tools

Site Tools


mozaic

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
mozaic [2025/03/15 19:13] – created Yukimozaic [2025/03/20 01:28] (current) Yuki
Line 1: Line 1:
 ====== Mozaïc ====== ====== Mozaïc ======
  
-[[https://www.youtube.com/watch?v=YygmFM3qP8w]]+Some game distributed with lottery tickets from Loto-Québec 
 + 
 +Download: [[https://archive.org/details/mozaic_202207]] (also hacked to bypass ticket validity checks) 
 + 
 +See also: [[https://www.youtube.com/watch?v=YygmFM3qP8w]] 
 + 
 +===== Install on Wine ===== 
 + 
 +This game makes heavy use of Indeo 5 and other DirectShow codecs so make sure to install it. Use a 32-bit prefix, and ideally pretend you're Windows XP and enable windowed mode. 
 + 
 +<code bash> 
 +# mount the ISO 
 +# the game won't run without it 
 +sudo mount MOZAIC.iso /mnt/cdrom 
 + 
 +# create a new 32-bit prefix 
 +# it currently won't work in a 64-bit prefix due to the codecs 
 +# also make sure the CD-ROM is detected as such 
 +export WINEARCH=win32 
 +export WINEPREFIX=~/.wine32 
 +winecfg 
 + 
 +# install the codecs 
 +winetricks -q allcodecs 
 + 
 +# install and run the game (also make sure $WINEPREFIX is set) 
 +wine /mnt/cdrom/Mozaic.exe 
 +</code> 
 + 
 +The installation may fail because you have an ''ï'' in the install path, you may remove it and put a normal ''i'' instead.
  
 ===== PAK file format ===== ===== PAK file format =====
Line 10: Line 39:
 |magic|string|0|4 bytes|"PACK"| |magic|string|0|4 bytes|"PACK"|
 |size|u32|4|4 bytes|Number of entries| |size|u32|4|4 bytes|Number of entries|
-|???| |8|32 bytes|Unknown|+|???| |8|32 bytes|Seems unused, can be used as a comment field|
 |filelist|File|40|size * (12 + name)| | |filelist|File|40|size * (12 + name)| |
  
Line 17: Line 46:
 ^Nom^Type^Offset^Size^Notes^ ^Nom^Type^Offset^Size^Notes^
 |filesize|u32|0|4 bytes| | |filesize|u32|0|4 bytes| |
-|offset|u32|4|4 bytes|Offset within the file| +|offset|u32|4|4 bytes|Byte offset from the beginning of the file| 
-|???|u32|8|4 bytes| | +|???|u32|8|4 bytes|Unknown, the game crashes right away if it's not what it expected
-|name|string|12| |Null-terminated string|+|name|Null-terminated string|12| |File path and name|
  
 ==== ImHex pattern ==== ==== ImHex pattern ====
Line 25: Line 54:
 <code c> <code c>
 import std.string; import std.string;
- 
-char magic[4] @ 0; 
-u32 size @ 4; 
  
 struct File { struct File {
     u32 filesize;     u32 filesize;
     u32 offset;     u32 offset;
-    u32 type;+    u32 unknown;
     std::string::NullString name;     std::string::NullString name;
     char data[filesize] @ offset;     char data[filesize] @ offset;
 }; };
  
-File filelist[size] @ 0x28;+char magic[4] @ 0; 
 +u32 size @ 4; 
 +char unknown[32] @ 8; 
 +File filelist[size] @ 40;
 </code> </code>
 +
 +===== Tools =====
 +
 +<html><details><summary>Node.js pak extractor</summary></html>
 +<code javascript extractpak.js>
 +const fs = require('node:fs');
 +const path = require('node:path');
 +
 +if(process.argv.length < 3)
 +{
 +    console.log("error: no input file");
 +    process.exit(1);
 +}
 +
 +var f = fs.readFileSync(process.argv[2]);
 +
 +var magic = f.toString('hex', 0, 4);
 +if(magic != "5041434b")
 +{
 +    console.log("error: invalid file");
 +    process.exit(1);
 +}
 +
 +var size = f.readUInt32LE(4);
 +var offset = 40;
 +
 +for(var i = 0; i < size; i++)
 +{
 +    var filesize = f.readUint32LE(offset); offset+=4;
 +    var fileoffset = f.readUint32LE(offset); offset+=4;
 +    var mystery = f.readUint32LE(offset); offset+=4;
 +    var next = f.indexOf(0, offset, 'ascii');
 +    var name = f.toString('ascii', offset, next).replaceAll("\\", "/");
 +    offset = next+1;
 +    console.log("%s; %s", name, mystery);
 +
 +    fs.mkdirSync(path.dirname(name), { recursive: true });
 +    var data = fs.createWriteStream(name, 'binary');
 +    data.end(f.slice(fileoffset, fileoffset+filesize));
 +}
 +</code>
 +<html></details></html>
 +
 +[[https://a39.dev/yuki/mpar|mpar]] - extractor and archiver
mozaic.1742080438.txt.gz · Last modified: 2025/03/15 19:13 by Yuki