尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A study port of "Tour" (Pulse / Pygmy Projects / Virtual Dreams, Assembly '98, 3rd place with 752 points), a DOS demo,
re-implemented in plain JavaScript for the browser and Node 22, with the reverse-engineering notes, tools and write-up.
It is the predecessor of the engine of 73 million seconds (see the sister project 73-Million-Seconds-by-Pulse).
Site (GitHub Pages): docs/ — player (demo.html), engine notes (index.html), the best asm tricks (writeup.html).
script.unr drives the demo (buffers + events run every frame in creation order, timed by the XM module position).
Effects: basic2d (palette, doubleimage, blend, fade, mapimage, blit), feedback (echo5, reebok), cellrd (Gray-Scott reaction-diffusion),
scene3d (software 3D: .exp/.lwe scenes, unrdisp, bomb, displace247), volumes (metaballs, plasma, marching cubes). 3D, 2D, volume and feedback effects were
verified against the original executable running in a CPU emulator (most of them bit-exact, see re/*.md).re/golden.py) and its frames are compared with the port's (tools/replay.mjs, tools/cmp-all.py):
mean error 1.2 / 255 per channel, 93.6 % of pixels within 8 levels over the 152 s of the demo (the JPEG decoder of the original differs from the browser's: that alone is a ~1 level floor).re/unpack_pmodew.py runs the PMODE/W loader (real mode → protected mode) in Unicorn to unpack TOUR.EXE; re/boot.py boots the unpacked original to its main loop;
re/harness.py calls any original function with custom buffers; tools/extract.py decodes TOUR.98 (dlz LZ, byte RLE, adaptive-Huffman LZ, BWT+MTF+Huffman).docs/ GitHub Pages site: index.html, demo.html, writeup.html, js/ (core, engine, assets, archive, fx/*), notes/*.html, assets/
re/ reverse-engineering notes (*.md), unpacker, emulator core (emucore.py), harness, golden-frame runner, differential tests (dt_*/)
tools/ extractor, renderers, comparison and test scripts
ENGINE.md the port's engine contract (was the brief for the parallel work)
TOUR.EXE TOUR.98 original demo files (unmodified)
cd docs && python3 -m http.server # http://localhost:8000/
python3 tools/mkraw.py # once (Pillow): build/raw for the node renderer
node tools/render.mjs 75 out.ppm # render the port at t = 75 s
node tools/test-engine.mjs; node tools/test-volumes.mjs; node tools/test-basic2d.mjs # self-checks
Reference (needs pip install unicorn capstone pillow numpy):
cd re && python3 boot.py # ~40 s, makes state.bin
python3 golden.py 0 153 0.033333 golden/full # the original's frames (EVERY=15 to keep one in 15; ~25 min)
cd .. && node tools/replay.mjs re/golden/full /tmp/replay && python3 tools/cmp-all.py re/golden/full /tmp/replay
Music clock: the player follows libopenmpt, so docs/assets/xm_times.json (made by tools/openmpt_times.py) gives the exact start time of every (order,row).
Demo, music and assets © Pulse, Pygmy Projects, Virtual Dreams (1998): camel, silver eagle, unreal, fndr, visualize, falcon. Music played with chiptune3 / libopenmpt. This port and the notes are non-commercial, for study.