2019-03-08 01:11:36 GMT

Extracting the audio from a Metal Gear Solid Ground Zeroes cutscene (FSM file)

I couldn't find the piece of music playing when the helicopters are taking off from camp omega, neither on soundtracks, be they regular or extended, nor in the game audio files. You can hear it here at 7m40s: <center> <iframe width="560" height="315" src="https://www.youtube.com/embed/G80bgC6koq8?start=460" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </center> My last hope was to rip the audio from the cutscene itself, hoping effects and music were mixed dynamically. They weren't. Just making the code public for posterity. Using php (command line) 'cause I'm a weirdo. <?php /******************************************************************************* Rips the audio from a Metal Gear Solid Ground Zeroes cutscene (FSM file) http://metalgearmodding.wikia.com/wiki/FSM ground-zeroes-fsm-sound-extractor │ ground-zeroes-fsm-sound-extractor.phpcli │ ├───files └───tools ├───revorb │ revorb.exe │ └───ww2ogg packed_codebooks_aoTuV_603.bin ww2ogg.exe *******************************************************************************/ echo "Start\n"; $fileIn = './files/p11_010100_000.fsm'; $fileOut = $fileIn.'.wem'; $bufSize = 256*1024; $chunksPos = array(); $fh = fopen($fileIn, "rb"); //********************************************** build sound chunks offsets list echo "Building chunks list\n"; while($fh && !feof($fh)) { $bufPos = ftell($fh); $buf = fread($fh, $bufSize); $off = 0; while(true) { $pos = strpos($buf, 'SND ', $off); if($pos === false) { break; } $off = $pos+1; $chunksPos[] = $bufPos + $pos; } } echo "Found chunks: ".count($chunksPos)."\n"; //*************************************************** recompose wwise audio file echo "Recomposing sound file\n"; $file = 0; file_put_contents($fileOut, ''); foreach($chunksPos as $pos) { ++$file; // first chunk has a larger header $headerSize = ($file === 1) ? 32 : 16; fseek($fh, $pos); $buf = fread($fh, $headerSize); $data = unpack( 'A4sig/Vclen/Vs1/Vs2/H*', $buf ); $chunk = stream_get_line($fh, $data['clen'] - $headerSize); file_put_contents( $fileOut, $chunk, FILE_APPEND ); } fclose($fh); //********************************************************* convert wwise to ogg echo "Converting sound file\n"; `"./tools/ww2ogg/ww2ogg.exe" "$fileOut" -o "$fileOut.ww2ogg.ogg" --pcb "./tools/ww2ogg/packed_codebooks_aoTuV_603.bin"`; //***************************************************************** optimize ogg echo "Optimizing sound file\n"; `"./tools/revorb/revorb.exe" "$fileOut.ww2ogg.ogg" "$fileOut.revorb.ogg"`; echo "done\n";
2019-02-27 01:11:30 GMT

Restoring the upholstery of a desk chair

It would probably have been cheaper to buy a new one, but much less fun. There isn't much to explain here, it's cutting foam and sewing fabric. You just stab the fabric with some thread and put the foam inside, quite easy. There is also some stapling, sure. Just marvel at the pictures, unlike me, who can only see the flaws. Part 1, the armrests -------------------- <center> [![](http://spenibus.net/f/t/cY)](http://spenibus.net/f/g/cY) [![](http://spenibus.net/f/t/cZ)](http://spenibus.net/f/g/cZ) [![](http://spenibus.net/f/t/d0)](http://spenibus.net/f/g/d0) [![](http://spenibus.net/f/t/d1)](http://spenibus.net/f/g/d1) [![](http://spenibus.net/f/t/d2)](http://spenibus.net/f/g/d2) [![](http://spenibus.net/f/t/d3)](http://spenibus.net/f/g/d3) [![](http://spenibus.net/f/t/cX)](http://spenibus.net/f/g/cX) </center> Part 2, the headrest -------------------- <center> [![](http://spenibus.net/f/t/d4)](http://spenibus.net/f/g/d4) [![](http://spenibus.net/f/t/d5)](http://spenibus.net/f/g/d5) [![](http://spenibus.net/f/t/d6)](http://spenibus.net/f/g/d6) [![](http://spenibus.net/f/t/d7)](http://spenibus.net/f/g/d7) [![](http://spenibus.net/f/t/d9)](http://spenibus.net/f/g/d9) </center> Part 3, the backrest -------------------- <center> [![](http://spenibus.net/f/t/da)](http://spenibus.net/f/g/da) [![](http://spenibus.net/f/t/db)](http://spenibus.net/f/g/db) [![](http://spenibus.net/f/t/dc)](http://spenibus.net/f/g/dc) [![](http://spenibus.net/f/t/dd)](http://spenibus.net/f/g/dd) [![](http://spenibus.net/f/t/de)](http://spenibus.net/f/g/de) [![](http://spenibus.net/f/t/df)](http://spenibus.net/f/g/df) [![](http://spenibus.net/f/t/dh)](http://spenibus.net/f/g/dh) [![](http://spenibus.net/f/t/dg)](http://spenibus.net/f/g/dg) </center> Part 4, the seat ---------------- <center> [![](http://spenibus.net/f/t/dp)](http://spenibus.net/f/g/dp) [![](http://spenibus.net/f/t/di)](http://spenibus.net/f/g/di) [![](http://spenibus.net/f/t/dj)](http://spenibus.net/f/g/dj) [![](http://spenibus.net/f/t/dk)](http://spenibus.net/f/g/dk) [![](http://spenibus.net/f/t/dl)](http://spenibus.net/f/g/dl) [![](http://spenibus.net/f/t/dm)](http://spenibus.net/f/g/dm) [![](http://spenibus.net/f/t/do)](http://spenibus.net/f/g/do) [![](http://spenibus.net/f/t/dn)](http://spenibus.net/f/g/dn) </center> All done -------- [![](http://spenibus.net/f/t/dq)](http://spenibus.net/f/g/dq) The end.
2019-02-27 00:33:23 GMT

Fixing a dislodged car headlight

The way my car illuminated the road had been bugging me for a while until I took a good look and realized that the inside of the front right headlight was detached from its housing. [![](http://spenibus.net/f/t/cN)](http://spenibus.net/f/g/cN) Life must be expensive or at least clunky when you can't fix things yourself. So naturally, I took apart the car (just a bit). This is a working headlight: [![](http://spenibus.net/f/t/cL)](http://spenibus.net/f/g/cL) This is a dislodged headlight, notice the empty black space in the middle, proof that the piece has sunk in its housing: [![](http://spenibus.net/f/t/cM)](http://spenibus.net/f/g/cM) That's when I grabbed a [Torx][1] screwdriver and a [socket wrench][2]: [![](http://spenibus.net/f/t/cO)](http://spenibus.net/f/g/cO) I had done the same operation a week earlier to fix the housing of my front left fog light housing. It was slightly broken, dislodged and the bulb was destroyed. At this point, I should mention it is a used car I bought 2 months ago, just to shift the burden of responsibility. I fixed the broken bits the best I could and changed the bulb. Speaking of which, the engineers who designed that car had the fantastic idea (spoiler, it's sarcasm) to use a less standard one, the PSX24W. Most shops don't carry it and when I found one, it cost me 33 euros for a single one. I thought about retro-fitting more standard bulbs but the difference in wattage, and therefore higher temperature, might have burned the housing. <center> [![](http://spenibus.net/f/t/cR)](http://spenibus.net/f/g/cR) [![](http://spenibus.net/f/t/cQ)](http://spenibus.net/f/g/cQ) [![](http://spenibus.net/f/t/cS)](http://spenibus.net/f/g/cS) </center> Anyway, back to the headlight. I was hoping to fix it properly but the housing is sealed shut and taking it apart was becoming tedious and potentially risky. I simply snapped the piece back where it should be and settled to help keep it in place with some zip-ties, hoping the heat wouldn't reach behind the reflectors and melt them away. <center> [![](http://spenibus.net/f/t/cT)](http://spenibus.net/f/g/cT) [![](http://spenibus.net/f/t/cU)](http://spenibus.net/f/g/cU) </center> There, all fixed. [![](http://spenibus.net/f/t/cV)](http://spenibus.net/f/g/cV) Then I went for a test drive to check and fix the alignment. The white stripes on the road are 3 metres long and the space between them are 10 metres long. `3 * 3 + 2 * 10 ~= 30 metres`, pretty much perfect. <center> [![](http://spenibus.net/f/t/dr)](http://spenibus.net/f/g/dr) [![](http://spenibus.net/f/t/cW)](http://spenibus.net/f/g/cW) </center> All done. [1]: https://en.wikipedia.org/wiki/Torx [2]: https://en.wikipedia.org/wiki/Socket_wrench