Blood & Lace — GMM Entertainment, Tortona, 2001. An Italian 3D adventure about a countess, a vampire baron and a book, built over two and a half years on an engine one man in Genoa wrote and licensed by name.
This repository measures the disc. It does not modify the game, port it, reverse-engineer it towards a re-release, or distribute any of its content: no asset from the disc is committed here, and the tools work on a copy you supply yourself.
It is the second half of a pair. The first is pc-zerocomico-doc — Zero Comico, October 2001, the same studio, the same engine, seven months later — and the two discs are the first titles in this collection to share an engine, which is what chapter 11 is for.
There is a debt in the other direction, too. The session that documented Zero Comico spent two hours unable to open the compressed container holding 76 % of that disc, and got out because a report on this game described its files as holding "LZH-compressed data". Blood & Lace is the reason Zero Comico opened, and three of that repository's claims are corrected here.
| 00 — Predictions | 55 predictions, written before the image was opened, never edited |
| 01 — A master with nothing to check it against | the volume, the namespaces, 215 unclaimed sectors, 56 empty files, and the caveat that runs through everything |
| 02 — The night of 30 December 2000 | 4,624 files in nine minutes at a quarter to five in the morning, nine builds recorded in the data, and thirty-six files that are also on the other disc |
| 03 — The engine, and what it lost | 237,568 bytes of code that Zero Comico does not have, a renderer with a name, and no Silver Raven |
| 04 — The man who wrote the engine | a signed licence notice inside japotek3d.dll, a demo group from 1993, and two surnames |
| 05 — Two extensions, one language | .esc is not a typo — the correction this session was convened for |
| 06 — Barbara, and 2,151 things to look at | twelve chapters, 123 rooms, 150,212 characters of Italian, and a test level that shipped |
| 07 — The combat the engine finally gets to use | five weapons, 99 hit sensors, a heartbeat that speeds up, and what that does to Zero Comico's best joke |
| 08 — One compressor, 4,622 files | JFX1, JGF5, LZHUF re-verified, and the channel order that turns out to be BGRA |
| 09 — Floor plans again, and a length field | 171 of 171 two-dimensional BSPs, and the model format parsed for the first time |
| 10 — 640×480, and 151 minutes of Italian | the older disc's video is four times the resolution at a third of the cost per pixel |
| 11 — Two discs, one engine, seven months | the comparison, measure by measure |
| 12 — Open questions | twelve of them, each with the measurement and the failed attempts |
| 13 — Prediction scoring | 45 hit, 24 missed, and why ten of the misses are the same mistake |
| 14 — Tools | what each script measures, what had to be fixed, and what returned zero |
| 15 — Leftovers | two files created by right-clicking, a directory called superfluous, and ten pounds sterling |
notes/ holds the saved output of every run the documents cite.
The engine has an author, and he signed it. japotek3d.dll contains
3,576 bytes of Italian in which Dario Pelella of Genoa states that he
developed it entirely himself, from 1996, and licensed this compiled version
to Giunti Multimedia Entertainment of Tortona for the production of
Blood & Lace — dated 29 December 2000 and signed. It names the four-person
core team, and it greets "tutti gli stimatori di JapoTek - demo group dal
1993". None of it is in Zero Comico's copy of the same DLL.
04
The engine shrank. japotek3d.dll is 819,200 bytes here and 557,056
there, and 237,568 bytes of the difference is compiled code: thirty-one C++
translation units, three assembly objects, a software renderer called
JapoTek SimPlus with 8-bit and 32-bit back ends, per-object shadow
rendering, and most of a Direct3D 5 path. The round 262,144-byte difference is
a coincidence of five section alignments.
03
Silver Raven On-line came after this game, not before both. No such
string, no DPLAYX.dll import, no NetService.hpp keyword. The cancelled
multiplayer project pc-zerocomico-doc found fossilised in the 2001 binary was
not linked into the 2000 one.
03
The combat system is real here. Thirty-two sword animation sets, twenty-six collision-sensor files declaring ninety-nine hit zones, seventy-six combat sounds named attacco / subita / morte, five weapons wired to the inventory, and a heartbeat that speeds up as you lose energy. Zero Comico's running gag about an animation the studio never made is about a feature they shipped nine months earlier. 07
The whole product was assembled in nine minutes. The engine linked at 04:44:31, the game at 04:45:20, and 4,624 files — two thirds of the disc — were copied into place between 04:47 and 04:53 on the morning of 30 December 2000. The executable's version resource claims it was "Compilata il 6 dicembre 2000 alle 6 del mattino!", which is twenty-four days wrong and was typed by somebody who meant it. 02
-
char.escis not a typo. That repository read the engine diagnosticCan't define another main character (look at file char.esc)as one letter away fromchar.isc. This disc has 108.escfiles, fifteen of them calledchar.esc, and Zero Comico's own executable contains the string.escat offset0x000D6B34..escis the engine's earlier name for the same format; the diagnostic is a fossil, not a misspelling. 05 -
The model format has a length field, and Zero Comico's parser now closes. Record type
0xF044carries au32at+4. With it read, that repository's chunk walk goes from a heuristic that worked on 520 of 526 files to a parse that closes on 526 of 526, and 4,266 records it used to step over become visible. 09 -
JGF5pixels are BGRA, not RGBA. Zero Comico's chapter 11 printsALDPELLE.tgaas "a solid RGBA (154, 183, 239, 255), a pale lilac" standing in for a character's skin. Sixteen single-colour textures on this disc — five of them named*pelle, skin — decode to blue under RGBA and to flesh under BGRA, and that repository's ownMp2/backgrd/azzurro.tga(azzurro: sky blue) is orange under RGBA and sky blue under BGRA. The engine's only rendering import is DirectDraw. 08
You need the disc image and Python 3. Nothing else — no third-party modules.
python tools/iso9660.py "Blood & Lace (Italian).iso" --vd
python tools/iso9660.py "Blood & Lace (Italian).iso" --extract _work/iso --joliet
python tools/census.py _work/iso
python tools/pe.py _work/iso --summary
python tools/avi.py _work/iso --summary
python tools/lzhuf.py _work/iso --verify # slow; run it in the background
B="_work/iso/program files/GMMEntertainment/Blood"
python tools/escisc.py "$B" --keywords
python tools/p3d.py "$B" --verify
python tools/bsp.py "$B" --verify
python tools/mp3.py "$B" --summary
Quote every path. The disc root contains Blood&&Lace.msi and the game
executable is blood&lace.exe; an unquoted & in a shell will do something
creative.
14 — Tools lists every command each document cites, which tools came from pc-zerocomico-doc, which had to be corrected, and which returned zero.
The artefact is a 519,358,464-byte image whose application identifier is
NERO - BURNING ROM and whose 1,655 timestamps are all valid and all carry
the correct seasonal GMT offset. There is no retail disc for this title in
this session, so tools/compare.py — which exists to check an image against
the thing it was made from — could not be run.
Zero Comico's first two chapters were written, carefully, about a rebuilt image, and had to be deleted when the pressed disc turned up. Every filesystem-derived number here is therefore a measurement of this file, and the two sectors past the end of its declared volume are an open question rather than a finding.